개발 이야기/백엔드 이야기

REST API란?

올리버 2022. 1. 12. 16:40

REST API란?

REST 기반으로 서비스 API를 구현한 것이다.

  • REST(Representational State Transfer)는 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를
    주고 받는 모든 것을 의미한다.
  • API(Application Programming Interface)는 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을
    촉진하며, 서로 정보를 교환가능 하도록 하는 것이다.

REST 구성 요소

1. 자원(Resource): URI
   모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
   자원을 구별하는 ID는 ‘/groups/:group_id’와 같은 HTTP URI 다.
   Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.


2. 행위(Verb): HTTP Method
   HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 Method를 제공한다.


3. 표현(Representation of Resource)
   Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다.
   REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.
   JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.

 

 

REST API 장단점

장점

     1. 사용이 쉽다. 

     2. Stateless이기 때문에 세션과 요청 내용이 연관되어 있지 않다.

     3. Client와 Server가 명확하게 분리된다. (분리 개발 가능)

 

단점

     1. 사용가능한 HTTP Method가 한정적이다.(GET, POST, PUT, DELETE)

     2. 표준이 없어 관리하기 어렵다.


REST API 설계 규칙

1. URI는 정보의 자원을 표현해야한다.

    - resource는 동사보다 명사를, 대문자보다 소문자를 사용한다.

 

2. 자원의 행위는 Http Method로 표현한다.

    - URI에 Http Method가 들어가면 안된다. 

        EX) POST http://test-api.com/users/insert    -> POST http://test-api.com/users 

    - URI에 행위에 대한 동사표현이 들어가면 안된다.

        EX) GET http://test-api.com/users/show/123 -> GET http://test-api.com/users/123

 

3. 슬래시 구분자( / )는 계층 관계를 나타내는데 사용하며 마지막 문자로는 포함하지 않는다.

        EX) GET http://test-api.com/rooms/bedrooms

 

4. 하이픈( - )은 URI 가독성을 높이는데 사용하며, 밑줄( _ )은 사용하지 않는다.

 

5. URI 경로에는 소문자로 작성한다.

    - URI 경로에 대문자 사용은 피하도록 한다.
    - RFC 3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문이다.

6. 파일 확장자는 URI에 포함하지 않는다.

    - Accept Header를 사용하여 나타낸다.

        EX) test-api.com/users/icon/123/photo.jpg (X)

            GET /users/icon/123/photo Host : test-api.com Accept : image/jpg (O)

 

7. 리소스 간에 연관관계가 있는 경우 URI에 나타내준다.

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

        EX) GET  /users/{userId}/devices (소유 관계 표현 예시)

 

주의 사항

CRUD를 모두 POST로 처리하면 Restful 하지 못한 API이기 때문에 적절한 Http Method를 사용하여야 한다.


REST API 설계 예시

CRUD Http Method Route
resource 내역 조회 GET /resource
특정 resource 정보 조회 GET /resource/:id
resource 생성 POST /resource
resource 수정 PUT /resource/:id
resource 삭제 DELETE /resource/:id

 

REST API 응답

Response를 줄때 Http 응답 코드를 사용한다.

  • 1xx : 전송 프로토콜 수준의 정보를 교환한다.
  • 2xx : 클라어인트 요청이 성공적으로 수행한다.
  • 3xx : 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 한다.
  • 4xx : 클라이언트의 잘못된 요청
  • 5xx : 서버쪽 오류로 인한 상태코드

참고

'개발 이야기 > 백엔드 이야기' 카테고리의 다른 글

암호화 알고리즘 종류  (0) 2022.05.09
MSA 와 Netflix OSS  (0) 2021.11.30