TIL-211119

EBinY·2021년 11월 19일
0

TIL - Today I Learned

목록 보기
9/54

REST API

  • Representational State Transfer, API
  • 웹(HTTP)의 장점을 최대한 활용할 수 있는 아키텍쳐
  • 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식
  • 클라이언트와 서버 사이에 데이터와 리소스를 요청하고, 요청에 따른 응답을 전달하기 위한 메뉴판에 비유
  • RestCase - 5 Basic REST API Design Guidelines
    • Resources(URIs), HTTP methods, HTTP headers, Query parameters, Status Codes
  • Google - API Design Guide(KR)
  • MS - REST API Guidelines

좋은 REST API를 디자인 하는 방법

  • REST 성숙도 모델(RMM)
    • REST API를 실용적으로 잘 적용하기 위한 모델
    • 총 4단계(0~3Lv), 2단계까지만 적용해도 좋은 API 디자인, 3단계는 이상점
    • 0단계: HTTP protocol 사용
      • 단순히 HTTP 프로토콜을 사용하는 기초 단계
    • 1단계: 개별 리소스와의 통신 준수
      • 모든 자원은 개별 리소스에 맞는 엔드포인트를 사용해야 함
      • 요청하고 받은 자원에 대한 정보를 응답으로 전달애햐 함
      • 엔드포인트 작성 시에는, 동사, HTTP method, 어떤 행동에 대한 단어 사용은 지양
      • 리소스에 집중해 명사 형태의 단어로 작성하는 것이 바람직함
      • 응답 또한 리소스와 그에 대한 정보, 사용 성공/실패 여부를 반환해야 함
    • 2단계: HTTP Method 원칙 준수
      • CRUD에 맞게 적절한 HTTP 메소드를 사용하는 것에 중점
      • 서버의 데이터를 변화시키지 않는 요청에는 GET
      • 새로운 리소스를 생성할 때에는 POST, PUT은 요청마다 같은 리소스를 반환(멱등성을 가짐)
      • 교체는 PUT, 수정할 때에는 PATCH
      • 그에 따른 응답코드도 적절하게 사용해야 함
      • 단순 조회하는 GET에는 200(OK), 새로 생성하는 POST에는 201(Created) 등
    • 3단계: HATEOAS 원칙 준수
      • Hypertext As The Engine Of Application State라는 하이퍼미디어 컨트롤을 적용
      • 요청은 2단계와 동일
      • 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성
      • 응답 후, 유저가 할 수 있는 다양한 액션들을 위한 링크를 넣어 새로운 기능에 접근할 수 있게 돕는다
      • 이 링크는 유저가 좀 더 쉽고 효율적으로 리소스와 기능에 접근하도록 하는 트리거가 되어준다

Open API, API Key

  • Open API: 정부에서 제공하는 공공데이터와 같이 누구에게나 열려있는 API
  • 무제한이라는 의미는 아님, 기관이나 API마다 정해진 이용 수칙과 제한 사항(가격, 정보의 제한 등)
  • 대표적인 예시로, Open Weather Map에서 제공하는 날씨 API
    • 제한적으로 날씨 API를 사용: 프리 플랜에서 분당 60회, 월 최대 100회 호출이 가능
    • 데이터를 JSON 형태로 응답
  • API Key: API를 사용하기 위한 키코드
    • 서버의 리소스를 사용하기 위한 접근 권한을 전달하는 방식
    • 가끔, API key가 필요 없는 경우도 있음

POSTMAN 연습

  • message server에 POST로 메세지를 올릴 때에, 메세지에 현재 시각을 스탬핑 하고 싶었음
    • pre-request script에 아래를 추가해주면, body에 담긴 "date": "{{current_timestamp}}"의
      value가 현재 시각으로 찍혀 보내지게 된다
    • 관련 링크
var current_timestamp = new Date();
postman.setEnvironmentVariable("current_timestamp", current_timestamp.toISOString());
{"username":"EBinY","text":"what time is
it?","roomname":"myroom","date":"2021-11-19T05:54:32.644Z"}

0개의 댓글