티스토리 뷰

- REST API (REpresentational State Transfer API) 란?

> 널리 사용되는 의미: HTTP 프로토콜로 제공하는 API

> 일반적인 프로그래밍 언어를 사용할 때 'API를 사용한다' 고 하면 누가 이미 만들어놓은 함수 (메서드) 를 가져다 쓴다는 의미였다

> 'HTTP Request를 통해서' 서버에서 이미 만들어놓은 기능을 동작시켜 그에 따른 Response를 받는 것

> 보통 Response로는 JSON 파일을 받게 된다

 

> REST의 의미: 엄밀하게 RESTful이라고 하려면 다음과 같은 것들을 지켜야 한다

>> client-server

>> stateless

>> cache

>> layered system

>> code-on-demand: 여기까지는 HTTP를 사용하면 보통 같이 따라옴

>> uniform interface: 근데 이걸 구현하기가 쉽지 않음. 아래의 조건들 중 특히 c, d가 API로는 구현하기 어려움

a) 리소스가 URI로 식별되어야 함

b) 리소스를 생성하거나 수정하고자 할 때 HTTP 메시지에 표현을 해서 전송해야 함

c) 메시지는 스스로 설명할 수 있어야 함 (self-descriptive message)

d) 애플리케이션의 상태가 hyperlink를 통해 전이되어야 함 (HATEOAS)

 

> 엄밀히는 위와 같은 REST의 조건들을 다 지키지 않으면 REST API가 아니라 Web API나 HTTP API라고 불러야 함

> 그러나 실제로는 RESTful하지 않은 Web API를 REST API라고 부르는 경우도 많음

 

- Web API의 원칙

> URI는 정보의 자원을 표현해야 한다

> 자원에 대한 행위는 HTTP 메서드 (GET/POST/PUT/DELETE) 로 표현해야 한다.

GET: 리소스를 조회하고 해당 문서에 대한 자세한 정보를 가져옴 (Read)

POST: URI를 요청하여 리소스를 생성함 (Create)

PUT: 리소스를 수정할 때 사용 (Update)

DELETE: 리소스를 삭제할 때 사용 (Delete)

 

예시)

GET /members (O)

멤버의 모든 정보를 달라는 요청

GET /members/delete/1 (X)

GET은 원칙적으로 정보를 요청할 때 사용하는 메서드임. 삭제를 표현하는 동사를 사용하는 것은 바람직하지 않음

DELETE /members/1 (O)

 

애초에 CRUD를 표현하는 것이 HTTP 메서드 타입이므로, URI에 CRUD를 표현하면 중복이 된다.

 

> 슬래시 (/) 는 계층을 나타낼 때 사용

> 하이픈 (-) 은 URI 가독성을 높이고 싶을 때 사용. 언더바 (_) 는 사용하지 않음

> URI 경로는 소문자만 사용 (RFC 3986은 URI 스키마와 호스트 제외하고 대소문자를 구별함)

> 파일 확장자는 URI에 포함하지 않고, Accept Header에 포함한다

 

> HTTP 상태 코드

200번대: 성공

400번대: 클라이언트 오류 (403은 가능한 쓰지 말고 400이나 404로 대체할 것을 권고)

301, 500: 서버 오류

 

- 서블릿을 이용한 Web API 작성 실습

 

> json 사용을 위한 라이브러리 의존성 추가

> 그 라이브러리의 ObjectMapper라는 클래스를 이용해서 JSON을 다룬다

> response.getWriter(): JSON String을 Response 객체에 넣어준다

> URL Mapping시 roles/* 와 같이 와일드카드를 사용해서 그 뒤에 뭐가 나오더라도 여기로 매핑되게 할 수 있음

 

> 막상 이 예제 실행해보면 진짜로 주소가 roles/*로 떠서 오류가 남. * 대신 100으로 대체해보면 제대로 뜸.

> 이렇게 하는 의미는 100이든 200이든 300이든 뒤에 뭘 넣어도 어쨌든 지금 만든 이 서블릿으로 오게 만든다는 것이다. 실행했을 때 *로 떠서 오류가 났지만 *로 접속을 안하면 됨

> 강의에서는 이런게 서블릿을 이용해서 Web API를 만드는 것의 불편한 점이라고 했다. Spring을 쓰면 된다?

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함