REST 구성
- 자원(Resource) - URI
- 행위(Verb) - HTTP Method
- 표현(Representations)
URI
http://opentutorials.org:3000/main?id=HTML&page=12
URI - 인터넷 상의 자원의 식별자
http://opentutorials.org:3000/main?id=HTML&page=12
http://opentutorials.org:3000/main?id=HTML&page=125123
과 같이 Query string으로 원하는 값을 가져오기 위한 식별자(id=HTML&page='*')를 포함한 값
URL - 인터넷 상의 자원의 위치
http://opentutorials.org:3000/main
http://www.naver.com
과 같이 Query string 이전까지의 값 자원의 위치만을 가르킴
URL은 URI에 포함 된다.
HTTP Method
- GET - 데이터를 가져옴 (Read)
- PUT - 데이터가 없으면 생성(Create) 있는 경우 수정(Update)
- POST - 데이터를 생성(Create)
- DELETE - 데이터를 삭제 (Delete)
- PATCH - 데이터의 일부분 수정 (Update)
HTTP 상태코드
- 1XX (Informational) - 요청이 수신되어 처리중
- 2XX (Successful) - 요청 정상 처리
- 200 OK - 정상 성공
- 201 Created - 성공하여 새로운 리소스 생성
- 202 Accepted - 접수는 되었으나 처리가 완료되지 않음
- 204 No Content - 요청을 성공적으로 수행했으나, 페이로드에 보낼 데이터가 없음
- 3XX (Redirection) - 요청을 완료하려면 추가 행동이 필요
- 301 Moved Permanently - 요청한 리소스의 URI가 변경됨
- 응답 시 Location header에 변경된 URI를 적어줘야 한다.
- 302 Found - 요청한 리소스의 URI가 일시적으로 변경됨
- 303 See other - 다른 URI에서 GET을 통해 얻어야 할 때, 서버가 클라이언트로 보내는 응답
- 304 Not Modified - 응답이 수정되지 않았음을 의미, 캐시를 목적으로 사용
- 307 Temporary Redirect - 이전 요청과 동일한 메소드를 사용하여 요청해야할 때, 사용된 HTTP 메소드를 변경해선 안된다.
- 308 Permanent Redirect - 영구히 다른 URI에 위치하고 있음을 의미, 사용된 HTTP 메소드를 변경해선 안된다.
- 301 Moved Permanently - 요청한 리소스의 URI가 변경됨
- 4XX (Client Error) - 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 400 Bad Request - 클라이언트가 잘못된 요청을 함
- 401 Unauthorized - 클라이언트가 해당 리소스에 대한 인증이 필요
- 로그인 하지 않은 유저가 로그인 했을 때 요청 가능한 리소스를 요청
- 403 Forbidden - 서버가 요청을 이해했으나 승인 거부
- 403 보다는 400이나 404를 사용할 것을 권고, 리소스의 존재 여부를 감추기 위해
- 404 Not Found - 요청 리소스를 찾을 수 없음
- 5XX (Server Error) - 서버 오류, 서버가 정상 요청을 처리하지 못함
- 500 Internal Server Error - 서버 문제로 오류 발생, 애매하면 500 오류
- 503 Service Unavailable - 서비스 이용 불가
REST 특징
1. Uniform 유니폼 인터페이스
URI로 지정한 리소스에 대한 조작을 통힐되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
2. Stateless 무상태성
작업을 위한 상태정보를 따로 저장하고 관리하지 않는다. 쿠키x 세션 정보x
3. Cacheable 캐시 가능
HTTP 캐싱 기능 적용 가능
4. Self-descriptiveness 자체 표현 구조
REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 구성됨
5. Client - Server 구조
사용자 인증이나 컨텍스트등을 직접 관리하는 구조(마이크로 서비스) 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 의존성 저하
6. 계층형 구조
보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성 구현 가능
PROXY, 게이트웨이 같은 네트워크 기반의 중간매체 사용 가능
REST APIT 디자인 가이드
1) 정보의 자원을 표현해야 하며 행위는 HTTP Method로 표현한다.
GET /members/delete/1 -> DELETE /members/1
2) URI 마지막 문자로 슬래시를 포함하지 않는다.
3) 밑줄(_) 대신 하이픈(-)을 사용한다.
4) 파일 확장자는 URI에 포함시키지 않는다.
5) URI 경로에는 되도록 소문자를 사용한다.
6) 리소스 간에 연관 관계는 /리소스명/리소스 ID/관계가 있는 다른 리소스명 과 같이 사용한다.
GET : /users/{userid}/devices
GET : /users/{userid}/likes/devices
7) 컬렉션은 복수로 사용하고 도큐먼트는 단수로 사용한다.
http:// restapi.example.com/sports/soccer/players/13
컬렉션 : sports, players
도큐먼트 : soccer, 13
참고 사이트
- https://meetup.toast.com/posts/92 REST API 제대로 알고 사용하기
- https://velog.io/@jch9537/URI-URL URI 와 URL과 URN
- https://kyun2da.dev/CS/http-%EB%A9%94%EC%86%8C%EB%93%9C%EC%99%80-%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C/ HTTP METHOD 와 상태코드
- https://developer.mozilla.org/ko/docs/Web/HTTP/Status HTTP 상태코드 세부 사항
'서버' 카테고리의 다른 글
| GraphQL vs Restful API (0) | 2022.12.24 |
|---|---|
| Spring MVC vs Spring Boot (0) | 2022.11.28 |
| spring vs spring boot (0) | 2022.11.24 |
| 전국 주소 파싱 python (0) | 2022.11.23 |
| Django python vs Spring Boot kotlin (0) | 2022.11.22 |
댓글