당신이 만든 건 REST가 아니지만
괜찮아
주영익 (youngiggy@gmail.com)
이 모든 것의 시작
발단
발단
발단
발단
HTTP
완벽가이드
나는 API 서버를 제대로 구현해 본 적이 있던가?
API Design
개인 프로젝트
정말 조금만 살펴보고 코딩을 시작하려고 했다
REST
REpresentational State
Transfer
Representation?
REST
효율적이고 확장성있는 시스템
Deriving REST
6 Constraints
Client-Server
Stateless
Cache
Uniform Interface
Uniform Interface
4 Interface Constraints
Uniform Interface
4 Interface Constraints
Uniform Interface
4 Interface Constraints
Uniform Interface
4 Interface Constraints
Layered System
Code-On-Demand (Optional)
Anti-REST
Anti-REST
Anti-REST
Anti-REST
Myths
미신 : REST는 4가지 HTTP 메소드를 쓰는 것
첫째, HTTP 메소드는
조회 = GET / 등록 = POST / 수정 = PUT / 삭제 = DELETE
와 같이 매핑되지 않는다.
이건 REST 문제가 아니라 HTTP의 문제.
미신 : REST는 4가지 HTTP 메소드를 쓰는 것
둘째, REST에서는 클라이언트가 어떤 메소드로든 시도할 수 있다.
서버가 어떤 메소드를 지원하는지 알아야 한다면 이는 out-of-band 정보이며,
RESTful하지 않다.
서비스하지 않는 메소드로 요청이 왔을 때, 서버는 405 Method Not Allowed를 리턴하면 된다.
미신 : REST는 4가지 HTTP 메소드를 쓰는 것
셋째, REST는 사실 HTTP에 종속되어 있지도 않다.
웹에서의 주요 프로토콜이 HTTP이고, 여기에 많은 영향을 많이 받았지만,
REST는 HTTP에 한정되지 않는다. (5.3.2 Connector View 참고)
사용하는 프로토콜 표준을 잘 지키는 것이 핵심.
미신 : REST는 좋은 URL에 관한 것이다
RESTful한 URI같은 건 없다.
/v1, /v2... 버저닝 필요없다.
미신 : REST는 좋은 URL에 관한 것이다
RESTful한 URI같은 건 없다.
/class/A/student/123/study-hard… depth를 구성할 필요없다.
왜 그 훌륭한 개발자들이
오해를 하고 있을까?
ROA
Resource-Oriented Architecture
ROA는 REST 기반 웹서비스를 만들기 위한 문제점을 해결하는 방법을 제공한다.
ROA는 RESTful 아키텍처이다.
ROA
REST가 잘못 이해되었다는 건 알겠는데 이제 어떡하지?
REST에 대한 진실을 알아버린 당신의 선택은?
1. 못 본 척한다
로이 필딩이 면접에서 REST에 관한 질문을 받는다면?
그건 REST가 아니야
됐어
넌 탈락이야
REST
REST에 대한 진실을 알아버린 당신의 선택은?
2. RESTful하지 않으면 REST라고 부르지 않는다
당신이 만든 건 REST가 아니지만 괜찮아
Your API isn’t RESTful
Your API isn’t RESTful — And That’s Good
사람들은 SOAP 같은 프로토콜 대신 간단하고 표준적인 대안을 원했다.
REST의 아이디어 중 일부는 필요에 잘 부합했지만 전부는 아니었다.
그래서 사람들은 필요한 것을 가져갔고 나머지는 무시했다.
그들은 REST란 용어를 납치했다.
Your API isn’t RESTful — And That’s Good
REST라면 서버와 클라이언트가 강하게 결합하지 않아야만 한다.
클라이언트는 서버가 제공하는 하이퍼미디어를 탐색하는 방법만 이해하면 된다.
가장 일반적인 예는 월드 와이드 웹이다.
많은 웹 API는 클라이언트와 강하게 결합되어 있고 하이퍼미디어가 부족하기 때문에 REST의 원칙을 위반한다.
Your API isn’t RESTful — And That’s Good
우리에게 필요한 건 웹 API의 일반적인 사용 사례를 공식적으로 정의하고 표준화 하기.
이 모든 혼란을 종식하기 위해 그 개념을 새로 명명해야한다.
이를 통해 강력한 표준 및 모범 사례를 구축할 수 있다.
RESOURCEful API
약 파는 거
맞습니다
RESOURCEful API
다음의 조건을 만족할 때 RESOURCEful하다고 간주된다
RESOURCEful API
다음의 조건을 만족할 때 RESOURCEful하다고 간주된다
RESOURCEful API
다음의 조건을 만족할 때 RESOURCEful하다고 간주된다
RESOURCEful API
다음의 조건을 만족할 때 RESOURCEful하다고 간주된다
RESOURCEful API
추가로 우수 사례(best practice)로써 제안하는 것
안정적인 API를 위해 지켜야 할 것
Client
Server
Laravel Controllers V5.2
Laravel Controllers V5.3
당신이 만든 건 REST가 아니지만 괜찮아
당신이 만든 걸 REST라고 안 부르면 괜찮아
하지만
우리
싸우지 말아요
선풍기 사망설
압존법
Q&A