개발자의 오르막
[스프링 기반 REST API 개발 #01] REST API 소개 본문
https://www.youtube.com/watch?v=RP_f5dMoHFc
# REST 아키텍처 스타일 충족 요건
- Client-Server
- Stateless
- Cache
- Uniform Interface
- Layered System
- Code-On-Demand (optional)
# Uniform interface
- identification of resources
- manipulation of resources through represenations
- self-descrive messages
- hypermisa as the engine of application state (HATEOAS)
# Self-descriptive message
- 메시지 스스로 메시지에 대한 설명이 가능해야 한다.
- 서버가 변해서 메시지가 변해도 클라이언트는 그 메시지를 보고 해석이 가능하다.
- 확장 가능한 커뮤니케이션
# HATEOAS
- 하이퍼미디어(링크)를 통해 애플리케이션 상태 변화가 가능해야 한다.
- 링크 정보를 동적으로 바꿀 수 있다.
한국의 기존 REST API 라 불리는 서비스는 크게, Self-descriptive message, HATEOAS 를 만족하지
못한다고 한다.
즉, REST API 로 응답값을 받은 JSON 은 REST API 문서를 참조하지 않아도, 이 메시지가 어떤 설명을
갖고 있는지 클라이언트가 이해가능해야 한다.
아니면 이 응답을 해석할 수 있는 문서 링크를 각 메시지마다 담기만해도 Self-descriptive message 를 충족한다.
< HTTP/1.1 200 OK
< Server: nginx
< Date: Mon, 26 Sep 2016 01:39:37 GMT
< Content-Type: text/xml;charset=utf-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Keep-Alive: timeout=5
< Vary: Accept-Encoding
< X-Powered-By: Naver
< Cache-Control: no-cache, no-store, must-revalidate
< Pragma: no-cache
<
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Naver Open API - blog ::'리뷰'</title>
<link>http://search.naver.com</link>
<description>Naver Search Result</description>
<lastBuildDate>Mon, 26 Sep 2016 10:39:37 +0900</lastBuildDate>
<total>8714891</total>
<start>1</start><display>10</display>
<item>
<title>명예훼손 없이 <b>리뷰</b>쓰기</title>
<link>http://openapi.naver.com/l?AAABWLyw6CMBREv+ayNJe2UrrogvJwg8aYKGvACiSUalNR/t6azGLO5Mzrrd0moVSQJZDl/6I4KIxGpx9y9P4JNANShXSzHXZLu2q3660Jw2bt0k1+aF1rgFYXfZ+c7j3QorYDkCT4JxuIEEyRUYGcxpGXMeMs3VPBOUEWGXntynUW03k7ohBYfG+mOdRqbPL6E84/apnqgaEAAAA=</link>
<description>명예훼손 없이 <b>리뷰</b>쓰기 우리 블로그하시는 분들께는 꽤 중요한 내용일 수도 있습니다 그것도 주로 <b>리뷰</b> 위주로 블로그를 진행하신 분이라면 더욱 더 말이죠
오늘 포스팅은, 어떻게 하면 객관적이고 좋은 <b>리뷰</b>를... </description>
<bloggername>건짱의 Best Drawing World2</bloggername>
<bloggerlink>http://blog.naver.com/yoonbitgaram</bloggerlink>
<postdate>20161208</postdate>
</item>
...
</channel>
</rss>
- Content-Type 을 RSS 으로 바꾼다면 해당 API 는 Self-descriptive message 을 만족시킨다.
응답을 받았을 때 응답 자체로 응답에 대한 정보를 알 수 있기 때문이다.
- 올바른 REST API 예시
https://developer.github.com/v3/issues/
# 해결방법
1) Self-descriptive message
- 미디어 타입을 정의하고, IANA에 등록하고, 그 미디어 타입을 리소스 리턴할 때 Content-Type 으로 사용한다.
- profile 링크 헤더를 추가한다.
2) HATEOAS 해결 방법
- 데이터에 링크를 제공 ( HAL )
- 링크 헤더나 Location 을 제공
'SpringFrameWork > SpringBoot' 카테고리의 다른 글
[Spring Boot] application.yml 설정 방법 (0) | 2020.04.02 |
---|---|
[스프링 기반 REST API 개발 #02] EVENT REST API (0) | 2020.03.22 |
SNS 공유하기 ( Spring Boot, Thymeleaf ) (2) | 2020.02.04 |
[SpringBoot] Annotation (0) | 2019.12.26 |
[SpringBoot] ObjectMapper (0) | 2019.12.26 |