-
REST API 소개백기선(인프런 강의)/스프링 기반 REST API 개발 2021. 1. 21. 21:26반응형
REST API 소개
API(Application Programming Interface)란?
- 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다. (구글 위키백과)
- 쉽게 말하면 사용자(응용프로그램, 클라이언트)와 운영체제(서버)간을 이어주는 역할
REST(REresentaional State Transfer)란?
- 인터넷 상의 시스템 간의 상호 운용성(interoperability)을 제공하는 방법 중 하나
- REST API : REST 아키텍쳐 스타일을 따르는 API
REST 아키텍쳐 스타일(발표영상)
Client-Sever
Server는 자원을 가지고 있고, client는 자원을 요청
Stateless(참고)
- client와 server의 동작, 상태정보를 저장하지 않은 형태
- server의 응답이 clinent와의 세션 상태와 독립적
- 장점
- 서버가 client정보를 저장관리 하지 않으므로 scaling이 자유로움
Cache
HTTP 웹 표준을 사용하므로 기존 웹에서 사용하는 인프라를 그대로 사용할 수 있다.
Uniform Interface(참고)
- Identification of resources
- URI로 식별
- manipulation of resources through represenations
- 리소스를 삭제하거나 수정할 때 HTTP메세지에 표현을 담아서 전송해야 한다.
- self-descrive messages
- 서버와 클라이언트 사이에서 주고 받는 메세지는 스스로를 설명 해야 한다는 의미이다.
- 메세지만 보고도 어떤 기능을 수행하는지 알 수 있어야 한다.
- 확장이 가능해야 한다.
기본적으로 요청메세지는 아래와같이 사용해야 한다.
GET / HTTP/1.1
Host: www.test.kr응답메세지는 아래와같이 사용해야 한다.
HTTP/1.1 200 OK
Content-Type: application/json-patch+json
[ {op: "remove", path: "a/b/c" } ]만약 Content-Type: application/json 으로 설정했다면 아래 본문을 제대로 해석할수가 없다.
- hypermedia as the engine of appliaction state (HATEOAS)
- 하이퍼미디어(링크)를 통해 애플리케이션 상태 변화가 가능해야 한다.
- 링크 정보를 동적으로 바꿀 수 있다. (Versioning 할 필요 없이!)
HTML로 HATEOAS를 만족하는 HTML 예제
HTTP/1.1 200 OK Content-Type: text/html <html> <head></head> <body><a herf="/test">test</a></body> </html>
JSON으로 HATEOAS를 맍고하는 예제
HTTP/1.1 200 OK Content-Type: application/json Link: </articles/1>; rel="previous", </articles/3>; rel="nest"; { "title": "The second article", "contents": "blah blah..." }
Layered System
REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있다. 또한 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수도 있다.
Code-On-Demand (optional)
- 클라이언트는 리소스에 대한 표현을 응답으로 받고 처리해야되는데, 어떻게 처리해야 하는지에 대한 code를 서버가 제공하는 것을 의미
- 서버에서 제공하는 코드를 실행하기 때문에 보안문제를 야기
self-descrive messages 문제 해결 방법
- 방법 1: 미디어 타입을 정의하고 IANA에 등록하고 그 미디어 타입을 리소스 리턴할 때 Content-Type으로 사용한다.
- 방법 2: profile 링크 헤더를 추가한다. (발표 영상 41분 50초)
- 브라우저들이 아직 스팩 지원을 잘 안해
- 대안으로 HAL의 링크 데이터에 profile 링크 추가
HATEOAS 해결 방법
- 방법1: 데이터에 링크 제공
- 링크를 어떻게 정의할 것인가? HAL
- 방법2: 링크 헤더나 Location을 제공
참고
반응형'백기선(인프런 강의) > 스프링 기반 REST API 개발' 카테고리의 다른 글
REST API 보안 적용 (0) 2021.01.24 이벤트 생성 API 개발 -3 (0) 2021.01.24 이벤트 생성 API 개발 -2 (0) 2021.01.23 스프링 HATEOAS (0) 2021.01.23 이벤트 생성 API 개발 - 1 (0) 2021.01.22