새소식

[5분 내로] 강의실/📋 그런 rest api로 괜찮은가?

[5분 내로] REST의 제약조건 uniform interface란?

728x90

 

안녕하세요. 팀드모네입니다.

오늘은 RESTful에 등장하는 uniform interface에 대해서 알아보겠습니다.

지난 시간에 REST는 REST의 제약조건을 모두 지키는 소프트웨어라고 정의하였습니다.

제약조건을 모두 지켜야 REST라고 부릅니다.

 

- REST 제약조건은 총 6가지로

1. client-server

2. stateless

3. cache

4. *uniform interface

5. layered system

6. code-on-demand : 자바스크립트 사용가능

이 있슴다. 다 암기하기 힘들다면, 적어도 *unifom interface만 알고 계시면 될 것 같습니다.

 

- 결론적으로 4개의 제약조건입니다.

 

삑! 

1. 리소스가 URL로 식별되면 된다.

2. 리소스를 삭제/수정/입력할 때 HTTP메세지에 그 표현을 담아서 전송

3. 메세지만 봐도 뭔 소린지 해석할 수 있어야 한다.(self-descriptive message)

4. 링크[각주:2]를 써서 페이지를 이동하라.(HATEOS)

 

결론적으로 메세지는 스스로 설명해야합니다. 예를들어서,

GET / HTTP/1.1

 

라는 메세지가 있습니다.

뭔가 빠진게 있는데 뭐가 빠졌냐면, 목적지가 빠져있습니다.

 

나 지금 어디로 가는거야??

 

따라서 저렇게 사용하시면 안되고, 아래의 내용처럼

Host를 작성하셔서 이 메세지가 향하는 목적지가 어디인지 알려주셔야 합니다.

GET / HTTP/1.1
Host: www.example.com

 

이렇게 쓰신다면, 메세지만 봐도 이 메세지를 해독할 수 있게 됩니다.

다음으로는 응답 메세지를 예시로 들겠습니다.

 

HTTP/1.1 200 OK
[{"op":"remove","path":"/A/B/C"}]

 

우리야 위 메세지를 보면, 

"아.. 저놈 json이 담겨있네?" 라고 생각하겠지만 클라이언트(컴퓨터)는 그렇지 않습니다.

따라서 아래의 메세지처럼 Content-Type이 적혀있어야 "아 저놈 제이슨이구나! 라고 클라이언트가 알 수 있습니다.

HTTP/1.1 200 OK
Content-Type: application/json-patch+json
[{"op":"remove","path":"/A/B/C"}]

 

위 메세지처럼 전달해줘야, 클라이언트가 oppath가 뭔지 알 수 있습니다.

어떻게 알 수 있냐면 Content-Type에 기술한 미디어 타입 즉, json patch의 문서를 보고 알 수 있다는 것입니다.

 

- REST 제약조건을 지킨 소프트웨어입니다.

 

- 리소스가 URL로 식별되어야하고, 리소스를 입력/수정/삭제할 때 HTTP메세지 그 의도를 담아야 하고, HTTP메세지만 봐도 뭔소린지 알아야하고, 링크를 써서 페이지를 이동해야한다고 답하면 됩니다.

 

다음시간에는 HATEOS에 대해서 설명하고 포스팅을 마무리하겠습니다. 

Continue..

 

다음 포스팅 보러가기 -> https://doctorson0309.tistory.com/696?category=854215

 

[5분 완벽설명] REST의 제약조건 HATEOS란?

안녕하세요. 팀드모네입니다. REST의 제약조건인 HATEOS에 대해서 짧고 간결하게 설명하겠습니다. 하단에 기술된 내용은 2000년에 발표된 로이필딩의 REST 논문을 참고하였습니다. 👨‍💻 HATEOAS란?

doctorson0309.tistory.com

 


reference : https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

reference : https://tv.naver.com/v/2292653

광고 링크 : https://ogx4.com

 

2023년 온라인 게임 전시회 - 온라인 게이머엑스포

에디터가 선정한 재미있는 게임들이 모인 온라인 전시회입니다! 새로운 게임을 발굴해보세요!

ogx4.com


 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.