REST API
Representational state transfer: 서버와 클라이언트간 분리된 구성 요소 간의 통일된 인터페이스를 제공하는 소프트웨어 아키텍쳐.
- 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위해 만들어짐.
REST는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성된 API 아키택쳐이다.
URI는 정보의 자원을 표현해야 한다.
- 자원에 대한 행위는
URI에 동사로 표현하지 않고 HTTP Method를 사용한다.
stateless(무상태성): 클라이언트의 각 요청은 매번 개별적으로 실행됨, 서버가 클라이언트로 받는 요청은 이전, 이후의 요청과 전혀 관계가 없음을 나타냄.
- 처음 로그인에 성공한 후 다음 요청에 관해서는 세션이나 토큰 처리를 안해놓았다면 서버는 클라이언트가 누군지 모른다.
- 그러므로 매 요청시 서버에게 클라이언트가 누군지 나타내도록 별도의 작업이 필요하다.
- 매 요청은 반드시 개별 요청을 만족하기 위한 충분한 정보를 제공해야함.
설계 규칙
URI에 _(언더바)사용 금지, -(하이픈)으로 대체
document(도큐먼트): 객체 인스턴스, DB의 레코드와 유사한 개념, 가장 기본이 되는 리소스 형식.
collection(컬렉션): 서버에서 관리하는 도큐먼트 리소스, 리스트.
store(스토어): 클라이언트에서 관리하는 리소스 저장소.
HTTP Methods
- 자원에 대한 행위는
HTTP Method로 표현한다.
GET(읽기): 서버로부터 정보를 조회 또는 요청, http header에 담아서 전송.
- 브라우저 검색창에 주소를 기입후 접속은
GET요청에 해당.
- 제일 빈번하다.
POST(쓰기): 클라이언트에서 서버로 데이터 생성, http body에 담아서 전송.
- 블로그, 페이스북, 인스타그램등 게시글을 포스팅 하는 행위(글 작성).
PUT(수정): 클라이언트가 서버에게 지정한 URL 데이터 저장 요청, POST와 유사.
DELETE(삭제): 클라이언트가 서버에게 지정한 URL데이터 삭제 요청.
URI에 HTTP Method가 포함하지 않는다.
GET /members/show -> GET /members/1
GET /members/insert/2 -> POST /members/2
예시
| CRUD | HTTP | URI |
|---|
| 전체 리소스 조회 | GET | /resources |
| 특정 리소스 조회 | GET | /resources/:id |
| 리소스 생성 | POST | /resources/:id |
| 리소스 수정 | PUT | /resources/:id |
| 특정 리소스 삭제 | DELETE | /resources/:id |
Response code
1xx: 전송 프로토콜 수준의 정보 교환.
2xx: 클라이언트 요청이 성공적으로 완료됨.
200(OK): CRUD의 성공적인 완료 상태 코드.
3xx: 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함.
4xx: 클라이언트의 잘못된 요청.
403(Forbidden): 클라이언트가 컨텐츠에 접근할 권한을 가지고 있지 않음.
404(Not Found): 클라이언트의 요청 리소스를 서버가 찾을 수 없음, 브라우저에서는 알려주지 않은 URL을 의미.
5xx: 서버측 오류로 인한 상태 코드.
References