[REST API]
🪄 REST API란 REST 아키텍처를 따르는 API라고 할 수 있다. 그렇다면 REST 아키텍처는? 웹에서의 통신을 위한 제약조건의 집합이다. 웹의 장점을 최대한 활용할 수 있는 아키텍처이기도 하다. (로이 필딩의 논문에서 처음 소개되었다) 저자는 이 제약조건을 모두 지켜야 REST하다고 할 수 있다고 한다😓 REST API에서 데이터나 자원은 URI로 식별되어야 한다. 행위는 HTTP 메서드(GET/POST/DELETE 등)로 전달하면 된다. REST를 통해, 서버와 클라이언트를 독립적으로 진화시켜갈 수 있다는 것이 큰 핵심인 것 같다. (웹페이지와 브라우저처럼?)
좋은 REST API를 디자인하기 위한 방법론이 있는데 이는 리차드슨의 REST 성숙도 모델에 잘 표현되어있다. 총 네 단계로 이루어져있는데, 간단히 기술하자면 다음과 같다. 0단계는 HTTP를 사용하여 통신하는 것. 1단계는 개별 리소와의 통신을 준수하는 것. 즉 모든 자원은 개별 리소스에 맞는 엔드포인트를 사용해서 표현해야 하고, 그 자원에 대한 알맞은 응답을 돌려주어야 한다는 것이다. * 엔드포인트 작성 시에는 리소스에 집중해 명사형태로 작성하는 것이 바람직하다. 2단계는 HTTP 메서드 원칙을 준수하는 것. CRUD 등 행위에 맞는 메서드를 사용해야 한다. 또 응답 메세지에는 알맞은 응답코드를 명확히 작성해야 하고, 3xx(redirection) 혹은 201의 응답코드는, 관련 리소스를 클라이언트가 확인할 수 있는 URI를 Location 헤더에 작성해야 한다. 3단계는 HATEOAS 원칙을 준수하는 것. HATEOAS는 (Hypermedia As The Engine Of Application State)의 약자이다😵💫 쉽게 말해 애플리케이션의 상태는 하이퍼링크를 통해 전이되어야 한다는 것이다. 2단계와 비슷하지만 응답에 리소스 URI를 포함한 링크요소를 삽입하여 작성한다는 점이 다르다. 응답으로 전달된 링크를 통해 또 새로운 기능에 접근할 수 있도록 하는 것이다.
REST라는 것을 한마디로 정의하기는 정말정 어려운 것 같다. 로이 필딩이 말하길 REST API는 hypertext를 포함한, self-descriptive message를 충족하는 uniform interface를 통해 리소스에 접근하는 API이고, self-descriptive한 메세지와 HATEOAS를 꼭 지켜야만 REST API라고 부를 수 있다고 한다ㅎㅎ 메세지가 스스로를 설명할 수 있어야 메세지만 보고도 해석이 가능하기 때문에, 서버와 클라이언트가 변화되어도 독립적으로 진화해나갈 수 있다는 점이 인상깊었다. 너무나도 어려운 제약조건이지만 항상 RESTful한 API를..^^ 위해 노력해야겠다는 생각이 많이 들었다!!
🚀 Unit 5. HTTP를 마치고!
REST API 외에도 Postman을 사용한 실습도 있었지만 내용 정리는 생략했다ㅎㅎ 간만에 포스트맨 켜보니까 예전에 테스트했던 것들이 몇 개 있어서 간만에 많이 생각났다ㅋㅋ 지금은 테스트해볼 수 없지만... 무튼 예전에 취업준비할 때 제일 애매하고 정리가 안 되는 게 REST였다... 그래서 도대체 레스트풀이 뭔데!!!하고 답답했었다. 이번 유닛을 통해서 그래도 어느정도는 개념을 정리 할 수 있어서 좋았다. 특히 예제와 함께 설명을 볼 수 있어서 이해가 훨 빨리 됐던 것 같다. 그리고 스터디원에게 추천받은 영상을 보면서는 더 깊이 공부할 수 있었고 재미있는 사례와 로이 필딩에 대한 이야기도 살짝 들을 수 있어서 아주아주 흥미롭고 좋았다. 좋은 API 디자인은 아직 꽤 남은 일 같지만 또 금방 다가올 일...!!! 사실 이번 유닛은 진작 끝났지만 그 뒤에 유닛이 하루이틀이면 쌩쌩 끝나버리니 회고를 이제야 하게 되었다. 그게 좀 압박이 될 때도 있지만 이렇게 다시 한 번 정리해보면서 잊혀질 뻔 했던 내용을 되돌아볼 수 있으니 나름 좋은 점도 있다. 나도 로이 필딩을 만족시킬만한 API를 만들어낼 때가 분명 오겠지? 우하하 HTTP 회고 끝
'공부기록 > 유닛 회고' 카테고리의 다른 글
S2U7-U8 [Spring Core] Spring Framework 회고 (0) | 2022.12.17 |
---|---|
S2U6 관계형 데이터베이스 회고 (0) | 2022.12.10 |
S2U4 [네트워크] 웹 애플리케이션 작동 원리 회고 (0) | 2022.12.04 |
S2U3 코딩 테스트 준비 회고 (0) | 2022.11.30 |
S2U2 [자료구조/알고리즘] 자료구조 회고 (0) | 2022.11.27 |
댓글