바오밥나무

REST API

In Web Posted May 08, 2020
Extra Form
저작자 초보개발자
출처 https://medium.com/@dydrlaks/api-%EB%9E%80-c0fd6222d34c
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

REST(REpresentational State Transfer) 

“Representational State Transfer라는 용어의 약자로서 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개됨. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표”

좀 더 설명하면 REST는 HTTP기반으로 필요한 자원에 접근하는 방식을 정해놓은 아키텍쳐입니다.

 

그렇다면 여기서 말하는 자원은 무엇일까요?

 

자원은 저장된 데이터(DBMS)는 물론, 이미지/동영상/문서(pdf 등)와 같은 파일, 서비스(이메일 전송, 푸쉬 메시지 등)를 모두 포함합니다.

 

그리고 REST API는 REST를 통해 서비스 API를 구현한 것을 말합니다.

 

REST에 대한 전반적인 이해가 있어야 REST API에 대해 알 수 있으므로 REST에 우선하여 설명을 진행하겠습니다.

 

REST에는 4개의 속성이 존재하는데요,

 

  • 속성1: 서버에 있는 모든 resource는 각 resource 당 클라이언트가 바로 접근할 수 있는 고유 URI가 존재합니다.
  • 속성2: 모든 요청은 클라이언트가 요청할 때마다 필요한 정보를 주기 때문에 서버에서는 세션 정보를 보관할 필요가 없습니다. 그렇기 때문에 서비스에 자유도가 높아지고 유연한 아키텍쳐 적응이 가능합니다.
  • 속성3: HTTP 메소드를 사용한다는 점입니다. 모든 resource는 일반적으로 http 인터페이스인 GET, POST, PUT, DELETE 4개의 메소드로 접근 되어야한다는 것입니다.
  • 속성4: 서비스 내에 하나의 resource가 주변에 연관 된 리소스들과 연결되어 표현이 되어야 한다는 점입니다.

 

REST의 구성요소에 대해 살펴보면 REST는 resource, method, message 세 가지로 구성되어 있습니다.

 

1. Resource

REST에서는 자원에 접근 할 때 URI(Uniform Resource Identifier)로 하게 됩니다. URI는 자원의 위치를 나타내는 일종의 식별자인데, URI 설계시 지켜야하는 설계규칙에 대해 살펴보겠습니다.

 

(1) URI는 정보의 자원을 표현한다

URI는 정보의 자원을 표현해야 합니다. 행위에 대한 표현이 들어가서는 안되며 따라서 리소스명은 동사보다는 명사를 사용해야 합니다.

회원의 조회

  • GET /members/show/321 (x)
  • GET /members/321 (o)

 

(2) 자원에 대한 행위는 HTTP METHOD로 표현한다

URI에 자원의 행위에 대한 표현이 들어가지 않는 대신, 오직 HTTP METHOD(GET, POST, PUT, DELETE)를 통해서만 행위를 표현합니다.

 

예를 들어, 회원정보를 가져올 때는 GET, 회원 추가 시의 행위를 표현하고자 할 때는 POST, 삭제할 때는 DELETE METHOD를 사용하여 표현합니다.

회원의 추가

  • GET /members/insert/2 (x)  
  • POST /members/2 (o)

회원의 삭제

  • GET /members/delete/1 (x)
  • DELETE /members/1 (o)

 

(3) 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용한다

해당하는 사이트에서 ‘john’ 개의 정보를 찾을 때 ‘happy-zoo’부터 하위 소속들을 거쳐서 ‘john’까지 도달하는 구조임을 알 수 있습니다.

http://www.happy-zoo.com/animals/dogs/john

REST 리소스 간에는 연관 관계가 있을 수 있고, 이런 경우 다음과 같은 표현방법으로 사용합니다.

/리소스명/리소스 ID/관계가 있는 다른 리소스명

ex) GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)

만약에 관계명이 복잡하다면 이를 서브 리소스에 명시적으로 표현하는 방법이 있습니다. 예를 들어 사용자가 ‘좋아하는’ 디바이스 목록을 표현해야 할 경우 다음과 같은 형태로 사용될 수 있습니다.

GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)

 

(4) URI 마지막 문자로 슬래시(/)를 포함하지 않는다

URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다르다는 것이고, 역으로 리소스가 다르면 URI도 달라져야 합니다. REST API는 분명한 URI를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URI 경로의 마지막에는 슬래시(/)를 사용하지 않습니다.

 

(5) URI에서는 ‘_’(언더바)보다는 ‘-’(하이픈)을 권장한다

URI를 쉽게 읽고 해석하기 위해, 불가피하게 긴 URI경로를 사용하게 된다면 하이픈을 사용해 가독성을 높일 수 있습니다.

 

밑줄(_)은 URI에 사용하지 않습니다. 글꼴에 따라 다르긴 하지만 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 합니다. 이런 문제를 피하기 위해 밑줄 대신 하이픈(-)을 사용하는 것이 좋습니다.

 

(6) URI 경로에는 소문자가 적합하다

URI 경로에 대문자 사용은 피하도록 해야 합니다. 대소문자에 따라 다른 리소스로 인식하게 되기 때문입니다. RFC 3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문입니다.

 

(7) 파일 확장자는 URI에 포함시키지 않습니다.

http://restapi.example.com/members/soccer/345/photo.jpg (X)

REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않습니다. Accept header를 사용하도록 해야합니다.

GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg

 

2. HTTP 메소드

다음은 HTTP 메소드에 대한 설명입니다. 자원에 접근할 때 어떤 성격의 요청인지 HTTP 메소드가 알려줍니다. 그 종류로는 GET, POST, PUT, DELETE가 존재합니다.

 

METHOD 역할
POST POST를 통해 해당 URI를 요청하면 리소스를 생성합니다.
GET GET를 통해 해당 리소스를 조회합니다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다.
PUT PUT를 통해 해당 리소스를 수정합니다.
DELETE DELETE를 통해 리소스를 삭제합니다.

Endpoint

메소드는 같은 URI들에 대해서도 다른 요청을 하게끔 구별해주는 항목이 있습니다. 이것을 Endpoint라고 하는데요. 위의 표에서 ‘http://api.domain.com/books/1’ URI에 대해 ‘GET’, ‘PUT’, ‘DELETE’ 메소드에 따라 다른 요청 성격을 띄고 있는 것을 알 수 있습니다.

 

3. 메시지

메시지는 HTTP header와 body, 응답상태코드로 구성되어 있으며 header와 body에 포함된 메시지는 메시지를 처리하기 위한 충분한 정보를 포함합니다.

 

Header

HTTP 바디에 어떤 포맷으로 데이터가 담겼는지 정의합니다.

요청 HTTP 헤더는 ‘Accept’ 항목으로 응답 HTTP 헤더는 ‘Content-type’으로 컨텐츠 타입을 설명합니다.

 

Body

자원에 대한 정보를 전달(데이터 포맷: JSON/ XML/ 사용자 정의 포맷)

 

응답상태코드

응답상태코드를 통해 리소스 요청에 대한 응답을 할 수 있습니다.

 

장점과 단점

지금까지 REST의 속성과 구성요소를 설명했습니다.

그렇다면 REST의 장/단점은 무엇일까요?

 

장점

  • 언어와 플랫폼에 독립적이다.
  • SOAP(다른 통신방식)보다 개발이 쉽고 단순하다.
  • REST가 지원하는 프레임워크나 언어등 도구들이 없어도 구현이 가능하다.
  • 기존 웹 인프라를 사용가능하다. HTTP를 그대로 사용하기 때문에 그런 것이다.

단점

  • HTTP 프로토콜만 사용이 가능하다.
  • p2p 통신 모델을 가정했기 때문에 둘 이상을 대상으로 하는 분산환경엔 유용하지 않다.
  • 보안, 정책등에 대한 표준이 없기 때문에 관리가 어렵고 이러한 부분까지 고려해서 구현 할 경우 설계나 구현에서 좀 더 어려움을 갖는다.

그렇다면 REST가API로써 어떻게 쓰일까요?

 

API를 설명 할 때 웹서비스와 특정 기술을 연결해주는 징검다리 역할이라고 말을 했었는데요, REST API도 똑같습니다.

 

예를들면 카카오 developer에 있는 카카오 로그인 프로그램을 자신의 웹서비스에 구현하고자 한다면 카카오에서 제공하는 로그인 API를 사용하면 됩니다. 이때 방법으로써 REST가 쓰이는 것이 REST API가 되는 것이죠.

 

웹서비스에서 로그인 데이터에 필요한 부분들을 REST 방식(URI형식으로 request)으로 카카오 데이터 베이스에 요청하는 식으로 작동하는 것이죠. 정말 간단하게 구현이 가능해서 REST API는 웹에서 일반적으로 사용되는 API라고 볼 수 있습니다.

 

https://velog.io/@stampid/REST-API%EC%99%80-RESTful-API

https://bcho.tistory.com/953

https://meetup.toast.com/posts/92


  1. Myth #5 : 접근성은 비싸고 어렵다

    #UI/UX 읽기
    Read More
  2. Myth #4: 디자인은 제품을 보기 좋게 만드는 것이다

    #UI/UX 읽기
    Read More
  3. Myth #3: 사람들은 스크롤하지 않는다?

    #UI/UX 읽기
    Read More
  4. Myth #2 모든 페이지는 3회 이내의 클릭으로 사용 가능해야 한다

    #UI/UX 읽기
    Read More
  5. Myth #1 사람들은 웹을 읽는다

    #UI/UX 읽기
    Read More
  6. REST API

    #Web 읽기
    Read More
  7. [번역] 반응형 웹 디자인의 단점

    #Web 읽기
    Read More
  8. 공인 IP, 사설 IP, 고정 IP, 유동 IP

    #Web 읽기
    Read More
  9. Billable Hour 직업의 함정

    #Web 읽기
    Read More
  10. 다국어사이트의 URL주소는 서브 도메인? 아니면 하위 디렉토리?

    #Web 읽기
    Read More
  11. [번역] 빵조각 메뉴: 무엇, 언제, 어떻게

    #UI/UX 읽기
    Read More
  12. [번역] 고통없는 계정 UX에 대한 3가지 법칙 : 로그인

    #UI/UX 읽기
    Read More
  13. [번역] 이 이메일에 회신하지 마시오

    #UI/UX 읽기
    Read More
  14. Survivorship Bias (생존자 편향의 오류)

    #Mkt 읽기
    Read More
  15. Top 25 Free Mobile Friendly & Responsive HTML Email Templates 2017

    #Web 읽기
    Read More
  16. Mobile Application Frameworks (HTML, CSS & JavaScript)

    #UI/UX 읽기
    Read More
  17. 여러 도메인 추적하기(Cross Domain Tracking)

    #GA 읽기
    Read More
  18. Envato Market의 Standard 라이센스(Regular 라이선스 vs. Extended 라이선스)

    #Web 읽기
    Read More
  19. 코딩이 필요 없는 웹사이트 제작 툴 & 사이트 10선

    #Web 읽기
    Read More
  20. 기술에 대해 "충분히 아는" PM이 되는 길

    #Web 읽기
    Read More
목록
Board Pagination Prev 1 2 3 4 Next
/ 4