자원(RESOURCE) - URL
행위(Verb) - HTTP METHOD
표현(Representations)
REST API 설계 시 가장 중요한 항목은 (1) URI는 정보의 자원을 표시해야 하고 (2) 자원에 대한 행위는 HTTP METHOD (GET, POST, PUT, DELETE)로 표현해야 한다.
GET /members/delete/1
// 위 표현 방식은 REST를 제대로 적용하지 않은 URI이다. delete와 같은 행위에 대한 표현이 들어가서는 안된다.
DELETE /members/1
// DELETE로 수정을 해 알맞은 REST API로 수정한다.
GET /members/show/1 (x)
GET /members/1 (o)
GET /members/insert/2 (x)
POST /members/2 (o)
http://restapi.example.com/houses/apartments
http://restapi.example.com/animals/mammals/whales
http://restapi.example.com/houses/apartments/ (x)
http://restapi.example.com/animals/mammals/whales (O)
// URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는
//것은 리소스가 다르다는 것이고, 역으로 리소스가 다르면 URI도 달라져야 한다. REST API는
//분영한 URI를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URI경로의 마지막에는 슬래시를 사용하지 않는다.
URI를 쉽게 읽고 해석하기 위해, 불가피하게 긴 URI 경로를 사용하게 된다면 하이픈을 사용하여 가독성을 높일 수 있다.
글꼴에 따라 다르긴 하지만 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 한다. 이런 문제를 피하기 위해 밑줄 대신 하이픈을 사용하든 것이 좋다
URI 경로에 대문자 사용은 피하도록 한다. 대소문자에 따라 다른 리소스로 인식되기 때문에 REC 3986은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문이다.
http://restapi.example.com/members/soccer/345/photo.jpg (X)
http://restapi.example.com/members/soccer/345/photo.jpg (X)
/리소스명/리소스 ID/관계가 있는 다른 리소스명
ex) GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)
//관계명이 복잡할 때 (사용자가 좋아하는 디바이스 목록을 표현)
GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)
http:// restapi.example.com/sports/soccer
// soccer 이라는 document로 표현
http:// restapi.example.com/sports/soccer/players/13
// sports, players 컬렉션과 soccer, 13(13번인 선수)를 의미하는 도큐먼트로 URI가 이루어지게 된다.
//
상태코드 | 원인 이유 |
---|---|
200 | 클라이언트의 요청을 정상적으로 수행함 |
201 | 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨 |
400 | 클라이언트의 요청이 부적절 할 경우 사용하는 응답 코드 |
401 | 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 응답 코드 |
--- | (로그인 하지 않은 유저가 로그인 했을 때, 요청 가능한 리소스를 요청했을 때) |
403 | 유저 인증상태와 관계없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 응답 코드 |
--- | 403보다는 400이나 404를 사용할 것을 권고, 403 자체가 리소스가 존재한다는 뜻이기 때문 |
405 | 클라이언트가 요청한 리소스에는 사용 불가능한 Method를 이용했을 경우 사용하는 응답 코드 |
301 | 클라이언트가 요청한 리소스에 대한 URI가 변경 되었을 때 사용하는 응답 코드 |
500 | 서버에 문제가 있을 경우 사용하는 응답 코드 |