안녕하세요. 팀드모네입니다.
오늘은 RESTful에 등장하는 uniform interface에 대해서 알아보겠습니다.
지난 시간에 REST는 REST의 제약조건을 모두 지키는 소프트웨어라고 정의하였습니다.
제약조건을 모두 지켜야 REST라고 부릅니다.
👨💻 REST 제약조건이 도대체 무엇인가요?
- REST 제약조건은 총 6가지로
1. client-server
2. stateless
3. cache
4. *uniform interface
5. layered system
6. code-on-demand : 자바스크립트 사용가능
이 있슴다. 다 암기하기 힘들다면, 적어도 *unifom interface만 알고 계시면 될 것 같습니다.
👨💻 uniform interface이 무엇인가요?
- 결론적으로 4개의 제약조건입니다.
삑!
1. 리소스가 URL로 식별되면 된다.
2. 리소스를 삭제/수정/입력할 때 HTTP메세지에 그 표현을 담아서 전송
3. 메세지만 봐도 뭔 소린지 해석할 수 있어야 한다.(self-descriptive message)
4. 링크를 써서 페이지를 이동하라.(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"}]
위 메세지처럼 전달해줘야, 클라이언트가 op와 path가 뭔지 알 수 있습니다.
어떻게 알 수 있냐면 Content-Type에 기술한 미디어 타입 즉, json patch의 문서를 보고 알 수 있다는 것입니다.
👨💻 결론 : REST가 무엇이냐?
- REST 제약조건을 지킨 소프트웨어입니다.
👨💻 그 제약조건이 무엇이냐? 고 면접관이 물어본다면?
- 리소스가 URL로 식별되어야하고, 리소스를 입력/수정/삭제할 때 HTTP메세지 그 의도를 담아야 하고, HTTP메세지만 봐도 뭔소린지 알아야하고, 링크를 써서 페이지를 이동해야한다고 답하면 됩니다.
다음시간에는 HATEOS에 대해서 설명하고 포스팅을 마무리하겠습니다.
Continue..
다음 포스팅 보러가기 -> https://doctorson0309.tistory.com/696?category=854215
reference : https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
reference : https://tv.naver.com/v/2292653
광고 링크 : https://ogx4.com