GET: 조회 (받겠다)
POST: 리소스 생성 (보내겠다)
PUT: 리소스 전체 갱신(넣겠다)
PATCH : 리소스 일부 갱신
DELETE: 리소스 삭제 (지정한 서버의 파일을 삭제하겠다)
설계 예시
| CRUD | HTTP | URI | 멱등 여부 |
|---|---|---|---|
| 전체 리소스 조회 | GET | /articles | O |
| 특정 리소스 조회 | GET | /articles/{id} | O |
| 리소스 생성 | POST | /articles | X |
| 리소스 전체 수정 | PUT | /articles/{id} | O |
| 리소스 일부 수정 | PATCH | /articles/{id}/like | X |
👉 추가 개념 : 멱등성(Idempotency)
- 멱등성은 동일한 요청이 여러 번 반복해도 서버의 상태가 변하지 않는 성질을 말한다.
- REST API에서는 중복 요청 시 의도치 않은 부작용을 막기 위해 사용되는 개념이다.
자주 사용되는 HTTP 상태 코드
| 상태 코드 | 설명 |
|---|---|
| 200 | 요청 성공 (조회, 수정 등) |
| 201 | 리소스 생성 성공 (POST 요청) |
| 400 | 잘못된 요청 (파라미터 오류 등) |
| 401 | 인증 필요 (로그인되지 않은 경우) |
| 403 | 접근 권한 없음 (보통 400, 404 사용 권장) |
| 404 | 리소스를 찾을 수 없음 |
| 405 | 허용되지 않은 Method 사용 |
| 301 | 리소스 URI 변경됨 (Location 헤더로 새 URI 제공) |
| 500 | 서버 내부 오류 |
RESTful 설계 시 가장 중요한 항목은 두 가지로 요약할 수 있다.
1) URI는 정보의 자원을 표현해야 한다. (리소스명은 동사보다 명사를 사용)
PUT /members/delete/1 (x)
DELETE /member/1 (o)
👉 URI에는 delete 같은 행위 표현이 들어가면 안 된다.
2) 자원에 대한 행위는 HTTP Method로 표현한다.
GET /member/show/1 (x)
GET /member/1 (o)
GET /members/insert (x)
POST /member (o)
PUT /member/active (x)
POST /member/active (o)
/api/houses/apartments
/api/animals/mammals/whales
URI의 마지막 문자로 슬래시를 포함하지 않음
URI는 고유한 리소스 식별자이므로, 경로 마지막에 /는 혼동을 줄 수 있음
하이픈(-)은 가독성을 높이는 데 사용
긴 URI일 경우 단어 구분에 활용
밑줄(_)은 사용하지 않음
글꼴에 따라 보기 불편하고 문자가 가려질 수 있음
URI 경로는 소문자 사용
대소문자에 따라 다른 리소스로 인식될 수 있음
파일 확장자는 포함하지 않음
http://restapi.example.com/members/1/image.jpg (x)
GET /members/1/photo HTTP/1.1
Host: restapi.example.com
Accept: image/jpg (o)
리소스 간 연관 관계는 보통 다음과 같이 표현한다.
/리소스명/리소스ID/관계가 있는 다른 리소스명
GET /articles/{id}/reviews
GET /users/{userid}/likes/devices
기존에 서버의 자원을 위치(Locator)으로 표기하면서 URL의 개념을 사용했는데 rest API에서는 서버의 자원을 하나하나 ID로 관리하기 때문에 URI의 개념을 사용한다고 하네요