우연치않게 REST API에 대해 알아보게 되었다.
정리 할 겸 포스팅을 해본다.
REST API에 대해 알아보기 전 REST란 무엇인가를 살펴보자.
REST
REST : "Represantational State Transfer"의 약자.
자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의마한다.
즉, *HTTP URI을 통해 자원(Resource)을 명시하고
HTTP Method(GET,POST,PUT,DELETE)를 통해 해당 자원의 CRUD Operation을 적용하는 것을 뜻한다.
(*HTTP : 클라이언트와 서버 간의 통신을 위한 프로토콜. 통신 규약)
여기서의 CRUD Operation은 컴퓨터 소프트웨어의 기본적인 데이터 처리 기능을 말한다.
1. CREATE : 데이터 생성(POST)
2. READ : 데이터 조회(GET)
3. UPDATE : 데이터 수정(PUT)
4. DELETE : 데이터 삭제(DELETE)
REST 구성 요소
1. 자원(Resource) : URI
- 모든 자원에는 고유한 ID가 존재하고 이 자원은 Server에 존재한다.
- 자원을 구별하는 ID는 [ex) '/board/{board.no}'] 와 같은 HTTP URI이다.
- Client는 URI를 이용하여 자원을 지정하고 해당 자원에 대한 조작은 설정한 URI를 통해 Server에 요청한다
2. 행위(Verb) : HTTP Method
- HTTP 프로토콜의 Method(GET,POST,PUT,DELETE)를 이용한다.
3. 표현(Representation)
- Client가 자원에 대해 조작 요청을 하면 Server는 이에 적정한 응답을 보낸다.
- 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 응답으로 나타낼 수 있다. (JSON을 많이 쓴다고 한다.)
REST 특징
1. Server - Client 구조를 가진다.
- 자원이 있는 쪽을 Server, 자원을 요청하는 쪽을 Client
- Server : API를 제공하고 비즈니스 로직 처리 및 저장을 담당한다.
- Client : 사용자 인증, 세션, 로그인 정보 등을 담당한다.
2. 무상태성(Stateless)
- 작업을 위한 상태정보를 따로 저장하고 관리하지 않기 때문에 들어오는 요청만을 단순히 처리하면 된다.
- 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.
3. 캐시 가능(Cacheable)
- HTTP라는 기존 웹 표준을 사용하기 때문에 웹에서 사용하는 기존 인프라를 활용할 수 있고 이에 따라 HTTP가 가진 캐싱 기능을 적용할 수 있다.
4. 자체 표현 구조(Self-descriptiveness)
- REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어있다.
REST API
위의 REST의 원리를 기반으로 만들어진 API를 REST API라고 한다.
그럼 이 REST API를 설계하는 방법에 대해 알아보자.
REST API 설계 규칙
1. URI는 정보의 자원을 표시해야 한다.
- 동사보다 명사를 , 대문자보단 소문자를 사용해야한다. Ex) /Board -> /board
2. URI 마지막 문자에 / 는 사용하지 않는다.
- Ex) /board/ -> /board
3. 자원에 대한 행위는 HTTP Method로 표현한다.
- Ex) /board/write -> POST /board
- Ex) /board/list -> GET /board
- Ex) /board/info?no=1 -> GET board/1
4. 언더바(_)보단 하이픈(-)을 사용한다.
- Ex) /test_page -> /test-page
5. CRUD를 나타대는 동사는 URI에 사용되면 안된다.
- Ex) /board/delete?no=1 -> DELETE /board/1
게시판 REST API 설계 예시)
목적 | HTTP Method | URI |
게시물 리스트 조회 | GET | /board |
게시물 상세보기 | GET | /board/{no} |
게시물 작성 | POST | /board |
게시물 수정 | PUT | /board/{no} |
게시물 삭제 | DELETE | /board/{no} |
'전체 개발.. > RESTful' 카테고리의 다른 글
Springboot/Mybatis/MariaDB를 이용한 REST API 개발하기. (0) | 2022.02.22 |
---|