[CS] REST API

June·2021년 8월 19일
2

[CS] CS 지식 정리

목록 보기
15/27

그런 REST API로 괜찮은가?

정의

REpresentational State Transfer
: a way of providing interoperability between computer systems on the Internet.

컴퓨터 시스템간의 상호운영성을 제공하는 방법 중 하나다

역사

Q: 어떻게 인터넷에서 정보를 공유할 것인가?

A: 정보들을 하이퍼텍스트로 연결하낟

  • 표현 형식: HTML
  • 식별자 : URI
  • 전송 방법: HTTP

어떻게하면 웹을 망치지 않고 HTTP를 고칠까? -> 해결책 HTTP Object Model
이것이 후에 REST라는 이름으로 발표를 한다. 그리고 이걸 2000년에 박사 논문으로 발표한다.

API

최초의 API

복잡해서 인기가 없었다. 그래서 플리커에서 REST라는 이름으로 간단한 것을 만들었고, 이것이 인기를 끈다.

하지만

REST를 만든 사람은 그것은 REST가 아니다라고 함. 저것은 그냥 HTTP API다.

REST API를 위한 최고의 버저닝 전략은 버저닝을 안 하는 것

뭐가 문제?

REST API : REST 아키텍쳐 스타일을 따르는 API

REST

분산 하이퍼미디어 시스템(예: 웹)을 위한 아키텍쳐 스타일

아키텍쳐 스타일이란 제약조건의 집합

REST를 구성하는 스타일

대부분은 HTTP를 사용하면서 만족된다.

  • Client-server
  • stateless
  • cache
  • layered system
  • code-on-demand (optional) - 서버에서 클라이언트에 코드를 보내서 실행될 수 있어야한다: 자바스크립트

Uniform Interface의 제약조건

처음 두 개는 잘 지켜지고 있다.

  • Indetification of resources : 리소스가 URI로 식별된다.
  • manipulation of resources through representations : 리소스를 만들거나, 수정하거나, 삭제할 때 Http 메시지에 표현을 담아야 한다.

Self-descriptive message : 메시지는 스스로를 설명해야 한다

이것 역시 self descriptive 하지 못하다. 이걸 해석하려면 어떠한 문법으로 작성되었는지 알아야 한다.

이것 역시 부족하다. op가 무슨 뜻인지, path가 무슨 뜻인지 알 수 없다.

미디어 타입이 어떻게 정의되어있는지 추가해주면 그걸 보고 알 수 있다.
즉 메시지 내용으로 온전히 해석이 가능해야하는데, 오늘날의 API는 대부분 그렇지 않다.

HATEOAS: 애플리케이션의 상태는 Hyperlink를 이용해 전이되어야 한다.

상태의 전이마다 항상 해당 페이지에 있던 링크를 따라가기 때문에 HATEOAS가 된다.

a 태그를 통해 링크가 있기 때문에 HATEOAS다.

json에서도 링크라는 헤더를 통해 리소스와 연결된 하이퍼링크를 제공할 수 있다. 이전과 다음 게시물의 링크가 제공되어 있다.

왜 Uniform Interface를 해야하나?

독립적 진화를 하기 위해서

HTTP 1.0을 만들 때 로이필딩이 했던 고민이다. HTTP를 고치고 웹을 안깨는 방법을 고민하다가 나온 것이다.

그럼 REST가 지켜지는 사례는?

웹사이트가 변경되어도 웹에 접근은 항상 잘된다. 심지어 HTTP 명세가 바뀌어도 접근이 잘 된다.

어떻게 한걸까요?

HTTP 개정판의 경우 7년동안 토론을 했는데 기능이 하나도 추가되지 않고 문서만 다듬었다. 하위호환성을 깨지 않기 위해서이다.

상호운용성(interoperability)에 대한 집착

REST가 웹의 독립적 진화에 도움을 주었나

로이필딩이 HTTP와 URI 명세 둘 다 저자 중 한 명이기 때문에 영향을 주었다.

그럼 REST는 성공했는가

그런데 REST API는?

원격 API가 꼭 REST API여야 하는가?

시스템 전체를 통제할 수 있거나 진화에 관심이 없다면 하지마라. 백엔드 개발자가 프론트 개발자를 완벽히 통제 가능하거나, 혼자서 개발하거나 이런 경우.

그럼 이제 어떻게 할까?

왜 API는 REST가 잘 안되나

HTML

JSON

그런데 Self-descriptive와 HATEOAS가 독립적 진화에 어떻게 도움이 될까요?

쉽게 말해 링크를 마음대로 바꿀 수 있다는 얘기다.

그럼 REST API로 고쳐보자

Self-descriptive

방법 1

번거롭다

방법 2

HATEOAS

방법1

방법 2

궁금점

상관 없다.

예를 들어 사내에서만 쓰는 것이면 필요 없다.

정리

기타 참고

REST API 제대로 알고 사용하기 - TOAST

바쁜 개발자들을 위한 RESTFul api 논문 요약

REST 아키텍처를 훌륭하게 적용하기 위한 몇 가지 디자인 팁 - spoqa

0개의 댓글