S2 Unit8 - [HTTP/네트워크] 실습

딩쓰·2022년 10월 6일

코드스테이츠 TIL

목록 보기
9/19

Chapter1. REST API

REST API 란?

  • REST: “Representational State Transfer”의 약자
  • 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

➡️ HTTP 프로토콜을 통해 요청과 응답에 따라 리소스를 주고받기 위해서는 알아보기 쉽고 잘 작성된 메뉴판이 필요한데, 이 역할을 API가 하므로 잘 알아볼 수 있도록 작성하는 것이 중요!

REST API를 디자인하는 방법

  • REST API를 작성할 때는 몇 가지 지켜야 할 규칙이 있음.
    로이 필딩의 REST 방법론을 실용적으로 적용하기 위해 리차드슨이 REST API를 잘 적용하기 위한 4단계 모델을 만듬.

REST 성숙도 모델

  • 총 4단계(0~3단계)로 나누어짐
  • 실제로 3단계까지 지키기 어렵기 때문에 2단계까지만 적용해도 좋은 API 디자인이라고 볼 수 있음. 이런 경우를 HTTP API 라고도 부름

REST 성숙도 모델 - 0단계

  • 단순히 HTTP 프로토콜을 사용하기만 해도 됨
  • HTTP 프로토콜을 사용하는 것만으로는 REST API라고 할 수는 없음
  • 0단계는 REST API를 작성하기 위한 기본 단계

REST 성숙도 모델 - 1단계

  • 개별 리소스와의 통신을 준수해야 함
  • 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야하며,
    요청하고 받는 자원에 대한 정보를 응답으로 전달해야 함
  • 앞의 0단계에서는 요청에서의 엔드포인트로 모두 /appointment를 사용
  • But, 1단계에서는 요청하는 리소스가 무엇인지에 따라 다른 엔드포인트로 구분하여 사용
  • 위의 예시에서 예약 가능한 시간 확인이라는 요청의 응답으로 받게 되는 자원(리소스)은 허준이라는 의사의 예약 가능한 시간대임
    그래서 요청 시 /doctors/허준 이라는 엔드포인트를 사용.
  • 특정 시간에 예약하면, 실제 slots라는 리소스의 123이라는 id를 가진 리소스가 변경되기 때문에, /slots/123 을 엔드포인트로 사용
  • 엔드포인트 작성 시에는 리소스에 집중명사 형태의 단어로 작성하는 것이 좋음
  • 또한 요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환해야함
    (밑의 예시: 김코딩이 9시에 예약을 했으나 실패)

REST 성숙도 모델 - 2단계

  • 1단계 예시에서는 모든 요청을 CRUD와 상관없이 POST 메서드를 사용하고 있음

  • But, 2단계에서는 CRUD에 맞게 적절한 HTTP 메서드를 사용해야 함

  • 위의 예시로 예를 들면

    • 예약 가능한 시간 확인
      • 예약 가능한 시간을 조회(READ)하는 행위 → GET 메서드를 사용
      • query parameter를 사용하여 필요한 리소스를 전달
        /doctors/허준/slots?date=2022-08-10
    • 특정 시간에 예약
      • 특정 시간에 예약을 생성(CREATE)하는 행위 →POST 메서드를 사용
      • 응답은 새롭게 생성된 리소스를 보내주기 때문에 응답 코드는 201 Created 로 명확하게 작성
      • 관련 리소스를 클라이언트가 Location 헤더에 작성된 URI를 통해 확인할 수 있도록 작성
  • HTTP 메서드를 사용할 때 지켜야 할 규칙

    • GET : 서버의 데이터를 변화시키지 않는 요청에 사용해야 함
    • POST: 요청마다 새로운 리소스를 생성하고, PUT 메서드는 같은 리소스를 반환.
      이렇게 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 함. → 멱등성을 가지는 PUT과 그렇지 않은 POST는 구분하여 사용!
    • PUTPATCH도 구분하여 사용해야 함
      • PUT은 교체, PATCH는 수정의 용도
  • 3단계까지 적용한 경우는 드뭄. 2단계까지만 해도 충분!

REST 성숙도 모델 - 3단계

  • HATEOAS(Hypertext As The Engine Of Application State)라고 불림
  • 하이퍼미디어 컨트롤을 적용
  • 3단계의 요청은 2단계와 동일. But, 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성해야 함
  • 위의 예시로 예를 들면
    • 예약 가능한 시간 확인
      • 허준의사의 예약 가능 시간을 확인한 후, 그 시간대에 예약을 할 수 있는 링크를 삽입
    • 특정 시간에 예약
      • 예약을 다시 확인할 수 있도록 링크를 작성
    → 이렇게 응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것이 3단계의 핵심 포인트!

Open API와 API Key

  • Open API

    • 누구에게나 열려있는 API이지만 무제한으로 사용가능한 것은 X

    • API마다 정해진 이용 수칙이 있으며, 제한사항(가격, 정보 제한)이 있을 수 있음

    • 정부에서는 Open API의 형태로 공공데이터를 제공

    • 날씨 API를 제공하는 대표적인 페이지

  • API Key

    • API를 이용하기 위해서 필요
    • 서버의 문을 여는 열쇠
    • 서버를 운용에 비용이 발생하므로 아무 조건 없이 클라이언트에게 데이터를 제공할 의무 없음
    • 데이터를 요청할 때 API key를 같이 전달해야 원하는 응답을 받을 수 있음

Chapter2 - Postman

  • 브라우저는 서버에 HTTP 요청을 보낼 수 있는 훌륭한 도구지만, 주로 웹 페이지를 받아오는 GET 요청에 사용함.

  • 테스트를 위해 GET 요청이 아닌 다른 요청을 보내려면, 개발자 도구의 콘솔 창에서 Web API fetch를 사용해야함

  • 테스트를 위해 매번 코드를 작성하는 것은 비효율적.

  • 그래서 매번 코드를 작성하는 대신 HTTP 요청을 테스트할 수 있는 다양한 API 테스트 도구들이 있음. 이 중 하나가 Postman (GUI)

  • 클라이언트 입장에서 서버 API를 테스트하거나, API를 만드는 과정에서 매우 유용

HTTP API 테스트 도구 (CLI)

  • curl (대부분의 리눅스 환경에 내장됨)
  • wuzz

HTTP API 테스트 도구 (GUI)

  • Postman
  • Insomnia

Postman 사용하는 방법

만들어져 있는 API 서버로 예시를 들어보겠음

  • HTTP로 소통하기 위해서는 API 서버의 endpoint가 URL로 해야함
  1. GET 메서드로 kimcoding이 작성한 모든 메시지를 조회하는 법 (http://3.36.72.17:3000/kimcoding/messages) 입력
  1. POST 메서드로 kimcoding이 새로운 message를 작성하는 법

  • Postman으로 날씨API 받아오는 화면
profile
Frontend Developer

0개의 댓글