[WEB] Restful: API

타키탸키·2022년 9월 21일
0
post-thumbnail

정의

  • REST(REpresentational State Transfer)
    • 기계와 기계가 규격화된 방식으로 인터넷과 웹을 통해 통신할 수 있는 규칙
    • server와 client가 통신하기 위한 규약 중 하나
    • 분산 시스템 설계를 위한 아키텍쳐(구성) 스타일
    • 네트워크 아키텍쳐 원리 모음
    • 제약 조건의 집합
    • 사이트 구성 원리
      • 표현(REpresentational) / 상태(State) / 전송(Transfer)
      • 자원의 표현을 가지고 상태를 전달한다
  • Restful API
    • REST스러운 API
    • 사이트 구성 원리를 따르는 API

  • 왜 필요한가?
    • REST API 메시지를 읽는 것만으로도 메시지가 의도하는 바를 명확하게 파악 가능
    • 기본적으로 HTTP를 사용하여 client와 server 통신(요청 및 응답 처리)
      • HTTP 인프라를 그대로 사용하기 때문에, REST API 사용을 위한 별도의 인프라 구축 필요 없음
    • client와 server가 독립적으로 운영 가능
      • client가 리소스를 요청하면 server는 해당 리소스를 응답해주기만 하면 된다
GET /
GET /sports/soccer

// soccer를 하는 player들 중 11번 선수를 지워라
DELETE /sports/soccer/players/11
DELETE /sports/baseball/pleayers/20
  • 실제 사례
    • url만 보더라도 어떤 위치에서 작업을 하는지 알 수 있음
// youtube

youtube.com/feed/trending [인기]
youtube.com/feed/subscriptions [구독]

youtube.com/channel/takityaki
youtube.com/channel/takityaki/playlists

역사

  • Restful API의 탄생
    • 로이 필딩
      • 웹 sw 개발
      • HTTP의 주요 저자
    • 웹 구조를 서술한 비공식 문서 존재했으나 실제 웹 구현이 너무 빨라 시대에 뒤떨어진 경우가 많았음
    • 이미 캐시와 프록시 등이 웹에는 존재했지만 이에 대해 인식하는 표준은 없다시피 함
    • Rest 개발 이유
      • HTTP 1.0, 1.1의 개념을 소통하기 위해서

구현 방법

  • 자원(Resource)
    • URI에 명시
    • /feed/subscriptions
    • 동사가 아닌 명사를 사용
      • GET /sports/soccer/show [X]
  • 표현(Representational)
    • Header로 전달
    • client가 전달 받고자 하는 자원에 대한 data
    • text/html, image/gif, text/*(모든 타입)
  • 상태(State)
    • 모든 동작은 Method로 표현
    • GET(조회), POST(생성), PUT(수정), DELETE(삭제)
    • url가 아닌 method를 통해 상태 표현
    • 수정한 data는 body로 전달
  • GET
    • URI 형식으로 웹 서버측 리소스(데이터)를 요청
    • 이때, 요청 받은 URI의 정보를 검색하여 응답
  • HEAD
    • 메시지 헤더(내부 문서 정보) 취득
    • GET 방식과 유사
    • 응답에 BODY가 없고 응답 코드와 HEAD만 응답
    • 웹 서버 정보 확인, 버전 확인, 최종 수정일 등 조회 시 사용
  • POST
    • 내용 전송(파일 전송 가능)
    • 요청된 자원 생성(create)
  • PUT
    • 내용 갱신 위주(파일 전송 가능)
    • 요청된 자원 수정(update)
    • 모든 데이터를 수정할 때 사용
      • ex:) /waters/:삼다수 => 삼다수가 가지고 있는 모든 데이터
  • PATCH
    • PUT과 유사
    • 자원의 일부를 교체하기 위해 사용
      • ex:) /waters/:삼다수 => 삼다수가 가지고 있는 일부 데이터(리터, 날짜)
  • DELETE
    • 자원 삭제
    • 요청된 자원 삭제(delete)
  • CONNECT
    • 요청된 자원에 대해 양방향 연결을 시작한다는 의미
    • 주로 웹 서버에 프록시 기능을 요청할 때 사용
  • OPTION
    • 목표 리소스와의 통신 옵션을 설명하기 위해 사용
    • 시스템에서 지원되는 메소드 종류 확인 가능
  • TRACE
    • client로부터 request packet이 변조 발생
    • server에 도달한 최종 packet의 request packet 볼 수 있음
    • 요청을 보낸 곳에 어떤 요청이 가공되어 있는지 등을 조사 가능
  • 표현
    • 리소스의 응답 타입은 Header로 나타낸다
    • 브라우저가 자동으로 설정하는 Accept 사용
    • ex:) "JPG 확장자의 프로필 사진만 응답해주세요"
      • Content-Type: text/html; charset=utf-8
      • client가 전달(요청)하는 data type
      • 응답 data type: Accept: text/html, image/jpg
  • Restful API 설계 원칙
    • Uniform Interface(일관된 인터페이스)
    • StateLess(무상태성)
    • Cacheable(캐시 가능)
    • Code on demand
    • Layered System(계층형 시스템)
    • Client / Server
    • 인터넷 상에 이미 해당 원칙이 적용되어 있으므로 인터페이스만 REST하게 설계해주면 된다
참고: 우리밋_woorimIT youtube channel - [Restful API] 자원의 표현을 가지고 상태를 전달한다.
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글