코드스테이츠_S2U8_7W_목,금

윤뿔소·2022년 10월 6일
0

CodeStates

목록 보기
24/47
post-thumbnail

전 시간엔 HTTP 메소드를 사용해 클라이언트가 서버에게 'CRUD' 명령을 내릴 수 있었다. 또 명령을 전달하는 방식에 따른 '프로토콜'로 전송했다. 그렇다면 요청과 응답을 할 때 어떠한 방식으로 작성해야할까? 여기도 '정해진 규칙'이 있어 바람직한 방법으로 전달 내용을 작성할 수 있다. 그걸 배워보자!
노마드코더
구글 REST API 규칙

REST API 정의

REST API는 Representational State Transfer의 약자로 로이 필딩이 웹의 장점을 최대로 활용한 아키텍쳐로 소개됐음

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

우리는 HTTP 기반 프로토콜 하에서 작성해 보내야됨, 그래서 HTTP 기반 API를 사용해야 알아보기 쉽고, 제대로 활용할 수 있음

REST API 디자인하기

레오나르드 리차드슨이라는 사람이 성숙도에 따라 4단계로 구분하여 REST API를 발전시켰다. 3단계까지 가면 이상적인 API라고 하지만 실제로는 어려워 2단계까지면 HTTP API라고 부르고 좋은 API라고 볼 수 있다.

0단계

HTTP 주소 사용

성숙도에 따르면 단순히 HTTP 주소만 사용해도 0단계 달성임!HTTP 프로토콜을 사용하고 있어 0단계 충족된 모습

1단계

맞는 엔드포인트 작성 등 개별 리소스(Resource)와의 통신을 준수

  • 1단계에선 모든 리소스는 개별적으로 맞는 엔드포인트를 사용 및 요청하고 받는 자원에 대한 정보를 응답으로 전달 필수임!

+ 엔드포인트는 그냥 우리가 어떤 명령을 입력하기 위해 쓰는 Path+Query 합쳐 만든 키워드 같은 거

  • 앞선 0단계 요청에선 엔드포인트를 /appoinment로 사용했음, 하지만 1단계에선 요청하는 리소스에 따라 엔드포인트를 설정해주는 것임!@위 사진에선 주치의로 허준을 선택했으니 엔드포인트를 /doctors/허준으로 정했고 예약은 그 날짜의 시간대를 특정하는 거니 그 시간대 id인 /slots/123를 엔드포인트로 잡았음

  • 즉! 어떤 리소스를 변화하고 어떤 응답을 받는지에 따라 엔드포인트가 달라지니 적절한 엔드포인트를 설정하자! 그러므로 ⭐️리소스에 집중해야하니 엔드포인트 작성시에는 명사 형태로 리소스에 관련되게 쓰자!

  • 또 각 리소스를 사용하는데 실패하는 것도 써주면 더욱 바람직하다! 위 사진은 실패했을때 관련된 엔드포인트를 명명하고 그에 대한 응답을 작성한 사진임

2단계

CRUD에 맞는 HTTP 메소드 사용

  • 0, 1단계에선 CRUD가 모두 POST 메소드였는데 2단계 관점으론 전혀 맞지 않음! 그래서 요청과 응답에 각 의도에 맞게 메소드를 작성해주기
  • 예약 시간 확인 : 허준의 시간표를 보기위함이어서 데이터를 Read해오기에 GET 메소드를 사용함
  • 특정 시간 예약 : 환자인 김코딩을 넣어주기 위해 Update했으므로 POST 메소드를 사용함
    • 데이터가 새롭게 작성되고, 새롭게 생성된 리소스를 담았으니 응답에 201 Created라고 정확히 명시해야하고, 관련 리소스를 Location 헤더에 작성된 URI를 클라이언트가 확인 가능하면 조건 충족!
  • HTTP 메소드는 상황에 따라 작성해야하는 규칙이 있음
    • GET은 서버의 데이터가 수정되지 않음, 매 요청마다 같은 리소스 반환, 멱등성(Idempotent)을 지님
    • POST는 요청마다 새 리소스 생성 및 반환, 그러므로 리소스가 변한다면 POST를 써야 마땅
    • PATCH도 수정하는 메소드라 PUT과 구분! PUT는 수정할 내용 모두 언급하여 수정하고 PUT은 매번 멱등성을 지니지만 PATCH는 하나만 수정 가능 멱등성은 없음!

3단계

HATEOAS라는 하이퍼미디어 컨트롤을 적용, 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성해야함

  • REST API를 개발한 '로이 필딩'은 3단계까지 해야 REST API라고 보고 그 이하는 HTTP API로 봤지만 실제로는 어려워 실상은 필수적인 것은 아님
  • 요청 뒤 응답에다가 그 후 클라이언트가 적용할 수 있는 메소드와 상황을 URI를 넣어서 한다는 의미
  • 예를 들어 허준의 예약시간대를 요청하면 그다음 응답엔 예약에 관련된 엔드포인트, URI, 메소드를 넣음

Open API

오픈소스같이 말 그대로 누구나 쓸 수 있는 API임, 하지만!! 정해진 수칙과 일정 이상 사용 시 가격, 정보 제한 등의 제한사항이 발생할 수도 있음, 또한 API Key를 사용해야 활용할 수 있는 API도 있음


Postman

API를 GUI로 쉽게 CRUD 해올 수 있는 툴임, 원래는 CLI같은 걸로 일일이 입력했음

  • 가입, 앱 다운 후 My Workspace에서 작업
  • API URL을 입력후 CRUD 메소드를 설정 후 Send하면 나옴! 엄청 편하게 요청 가능!!

과제

포스트맨으로 코스의 message states Server에 요청해보자!

시작

  • 우선 root-endpoint(root-URL)를 입력해 요청을 시작!

만지기

  • /뒤 'Path' 입력하여 Key역할을 함
    • https://api.github.com/user라면 user가 Path!
  • 그렇게 URL을 입력해 자원을 정하고 path를 정해 무엇인가에 들어갈지 정하는 것!
    • 저 URL 뒤 /kimcoding/messages를 작성하고 GET하면
    • Path 뒤 조건 ?roomname=로비인 Query 즉, URI를 작성하면이렇게 조건에 맞춰 나온다.

수행

이제 message states Server에 내 깃헙 아이디로 읽고, 업데이트해보자.

  • 참고
    • message states Server의 JSON에서 쓰이는 속성들
    • 요청 형식은 'JSON'임
    • Path엔 /messages 뿐만 아니라 /clear도 있어서 POST 해주면 초기화됨
  1. message states Server의 루트엔드포인트로 입력 후 /Rhino-ty/messages 입력하고 GET하면 기본으로 나옴
  2. URL 입력창 아래 여러 카테고리중 body태그로 가 body를 입력
    • 우리는 JSON을 바로 넣어줄 거니 raw 선택 후 옆에 입력 언어 JSON으로 변경
  3. POST로 바꾸고 body에 API의 속성 작성 후 결과 확인id가 자동 적용 됐고 잘 뜬 걸 보니 Create 성공!
  4. GET으로 내용 확인잘 떴따!

추가 : 날씨 API

서울 id와 내 날씨 API 키를 입력해 불러온 모습

추가 : 영화 API

22년 7월 1일 기준 박스오피스를 가져온 모습

알게된 것

물론 API는 백엔드가 하지만 작성법, 이용법을 알아야 우리도 서버에서 제대로 가져오고 할 수 있음! 꼭 복기하기!

profile
코뿔소처럼 저돌적으로

1개의 댓글

comment-user-thumbnail
2022년 10월 6일

잘보고가욥 :D

답글 달기