Rest API는 Rest를 기반으로 만들어진 API를 의미합니다. 이번 포스트에서는 Rest하다는 것이 무엇인지 그 의미에 대해 Rest API의 등장부터 차근차근 정리해보도록 하겠습니다.
Rest API의 등장
Rest API란 Representation State Transfer API의 약어로, 2000년도 로이 필딩(HTTP의 주요 저자 중 한명)의 박사 학위 논문에서 최초로 소개되었습니다. 로이 필딩은 웹(HTTP) 설계의 우수성에 비해 제대로 사용되지 못하는 모습이 안타까워 웹(HTTP)의 장점을 극대화 시킬 수 있는 아키텍처로써 Rest API를 발표했다고 합니다.
Rest API의 구성
Rest API는 다음과 같이 구성되어 있습니다.
Rest API의 특징
[ Request Params을 이용한 URL ]
>> 회원 모두 조회: GET localhost:8080/members
>> 회원 한명 조회: GET localhost:8080/members?uId=a
>> 회원 정보 수정: POST localhost:8080/members/rev?uId=a
>> 회원 정보 삭제: POST localhost:8080/members/rm?uId=a
[ Uniform Interface을 이용한 URL ]
>> 회원 모두 조회: GET localhost:8080/members
>> 회원 한명 조회: GET localhost:8080/members/a
>> 회원 정보 수정: PUT/PATCH localhost:8080/members/a
>> 회원 정보 삭제: DELETE localhost:8080/members/a
Stateless(무상태성)
Cacheable(캐시 가능)
Self-descriptiveness(자체 표현 구조)
Client-Server 구조
계층형 구조
Rest API 디자인 가이드
URI은 정보 자원을 표현해야 합니다. 행위에 대한 표현이 들어가서는 안되며 리소스명은 동사보다는 명사를 사용합니다.
URI는 하나의 고유한 리소스를 대표하도록 설계합니다.
특정한 URI는 반드시 그에 상응하는 데이터 자체를 의미해야 합니다.
특정 URI를 통해서 사용자가 원하는 정보를 제공할 수 있어야 합니다.
자원에 대한 행위는 HTTP Method (GET,POST,PUT,PATCH,DELETE)로 표현해야 합니다.
POST localhost:8080/members/rm?uId=a - (1)
DELETE localhost:8080/members/a - (2)
✨ 1번보다 2번이 더 좋음!
Rest API 설계 시 주의 사항
/
는 계층 관계를 나타낼 때 사용합니다.localhost:8080/members/a
마지막 문자로 /
를 포함하지 않습니다.
/
는 포함하지 않습니다.긴 URI를 작성해야 하는 경우 가독성 향상을 위해 -
를 사용할 수 있습니다.
URI에서 _
는 가독성이 떨어지고 문자에 가릴 수 있기 때문에 사용하지 않습니다.
URI경로는 소문자로 표현합니다.
파일 확장자는 URI에 포함하지 않습니다.
http://restapi.example.com/members/soccer/345/photo.jpg (X)
GET / members/soccer/345/photo HTTP/1.1
Host: restapi.example.com
Accept: image/jpg (O)
리소스간의 관계 표현법
GET: .../naver/pay
>> naver has payments department (has-a 관계일 때 일반적으로 / 사용)
GET: .../naver/payments/detail // 네이버 페이 상세목록
>> payments's details ('s 관계일 때도 일반적으로 / 사용)
GET: .../naver/shopping/likes/food // 네이버 쇼핑 리스트 찜 목록 중 음식 관련 카테고리
>> likes는 동사지만 리소스 간의 관계를 명확하기 표현하기 위해 이렇게 사용할 수 있음
자원을 표현하는 객체나 객체 집합은 복수로 표현합니다.
https://shopping.naver.com/my/keep-products
HTTP 응답 상태 코드
잘 설계된 REST API는 URI만 잘 설계된 것이 아닌 그 리소스에 대한 응답을 잘 나타내줄 수 있어야 합니다. 정확한 응답의 상태코드는 많은 정보를 전달할 수 있기 때문입니다.
응답 상태 코드는 종류가 많아 대표적으로 자주 쓰는 것만 요약하겠습니다.
2xx - 성공
200
OK201
Created게시물 작성이나 회원 가입
등 새로운 데이터를 서버에 쓰는 작업이 성공했을 때 사용함202
Accepted게시글 등록 / 삭제 예약
203
Non-Authoritative Information204
No Content웹 문서 편집기의 save 버튼
리소스의 삭제가 정상적으로 처리되었을 때
3xx - 리다이렉션
301
Moved Permanently 영구 리다이렉션
308
Permanent Redirect 영구 리다이렉션
302
Found 일시 리다이렉션
303
See Other 일시 리다이렉션
302
대용으로 등장하였지만 302
보다 자주 사용되진 않음304
Not Modified 특수 리다이렉션
4xx - 클라이언트 오류
400
Bad Request401
Unauthorized비로그인으로 접속
했을 경우 발생404
Not Found403
과 같이 클라이언트가 권한이 부족한 리소스에 접근했을 경우 페이지 숨기는 용도로 가끔 사용5xx - 서버 오류
500
Internal Server Error503
Service UnavailableRetry-After
: HTTP 헤더는 가능하면 서비스를 복구하기 전 예상 시간을 포함해야 함Retry-After
- 날짜 표기로 언제부터 ~ 언제까지 서비스 이용이 불가능한지 표현 가능