Back to Posts

spg 회고록 011회차

Posted in SPG-hompage

REST api

REST(REpresentational State Transfer

  • 정의 : 자원을 이름(표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는(통신) 모든 것을 의미한다.
  • REST 아키텍쳐 스타일(제약 조건들)을 모두 만족해야하는 API
  • REST 아키텍쳐의 제약 조건
    • Client - Server 구조
    • Stateless : Client의 Context를 서버에 저장하지 않는다.
    • Cache : 브라우저 캐싱 기능을 제공함
    • Uniform Interface : URI로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다. -> HTTP 표준에만 따른다면 모든 플랫폼에 사용 가능하다.
      • URI로 식별 가능
      • 자원을 조작할 때 해당 -> method를 통해 조작(POST, GET, PATCH, DELETE, PUT)
      • 메시지가 스스로 설명 가능 -> packet만 보고 어디에서 왔고 어턴 타입인지 알아볼 수 있어야함 (IANA에서 설정함)
      • application 상태가 hyperlink를 통해서 전의 되야 한다. -> 페이지네이트 또한 uri에 정보를 포함하고 있어야함(대부분 안지키는 경우가 많음)(HATEOAS)
    • Layered System : API서버는 순수 비즈니스 로직을 수행하고, 그 앞단에 사용자 인증, 암호화, 로드 밸런싱 등을 하는 계층을 추가 해야한다.(https에서 ssl 계층과 같은 것)
    • Code-on-Demand : 서버에서 코드를 클리이언트에게 보내서 실행할 수 있어야 한다.(Ex: js) -> Option이라서 안 지키는 경우가 많음

  • Uniform Inteferface 안지켜진 예시
    • 목적지 정보가 빠진 경우
    • jpa life cycle
    • client가 응답에 대한 설명이 없음 contex type 등을 명시해야함
    • context type 추가 후
    • 해당 반환 값(op/path 같은 정보)에 대한 명세를 찾아가서 내용을 이해할 수 있어야하지만 json-patch라는 명세서로 가면 내용을 알 수 있음
    • self-descriptive : 확장 가능한 커뮤니케이션 -> 서버나 클리이언트가 변경되더라도 위와 같은 명세/IANA등에 등록된 명세를 보고 해석이 가능하다. -> 해석된 내용을 바탕으로 op 값이 무엇인지 그리고 반환 값이 어떤것을 의미하는 지를 알 수 있다.

  • HATEOAS
    • 사용 이유 : 독립적인 진화를 하기 위해서 사용함
    • 서버가 변경되어도 client가 update할 이유가 없도록 하기 위해서 사용함
    • 어디서 어디로 전이가 간으한지 미리 결정되지 않느다. -> late binding : 서버가 제공하고, 서버가 마음대로 바꾼 링크대로 따라 가면된다.
    • URI 앞에 abc/{id} 에서 bcd/{id}로 바뀐경우 bcd는 서버에서 제공된 데이터 이다. 그러므로 뒤에 id도 또한 제공된 데이터이므로 따라 가면된다.
  • Web : 인터넷에 연결된 사용자들이 서로 정보를 공유할 수 있도록 하는 공간을 의미
    • 표현 방식 : HTML
    • 식별자 : URI
    • 전송 방법 : HTTP

반성 과 삽질

  • 반성
    • 함수를 개무시했다는 생각이 든다.(PUT, Delete 등 함수를 사용하지 않음 -> 수정 필요한 부분)
    • 페이지 네이트 할 때 URI에 해당 정보를 넣지 않음
    • URI정보는 모두 명사형태로 진행해야하지만 동사 형태로 진행한 경우도 많음

Read Next

JPA 공부 003회차