HTTP / 네트워크 실습_1

hyxoo·2023년 3월 29일
0

코드스테이츠

목록 보기
28/37
post-thumbnail

📝[Section2_Unit8] HTTP/네트워크 실습

📌 REST API

REST API는 서버과 클라이언트가 요청과 응답을 주고받을 때 지켜야하는 통신 규약을 의미한다.

REST API에서 REST는 “Representational State Transfer”의 약자로, 로이 필딩 (Roy Fielding)의 박사학위 논문에서 웹(http)의 장점을 최대한 활용할 수 있는 아키텍처로써 처음 소개되었습니다. REST API는 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식을 말합니다.

✔️ Rest API 작성

로이 필딩의 REST 방법론을 더 실용적으로 적용하기 위해 레오나르드 리차드슨(Leonard Richardson)이 만든 4단계 REST 성숙도 모델이다. 이것을 토대로 API를 작성할 때, 보통 2단계까지만 적용해도 좋은 API 디자인이라고 할 수 있다.

📎 REST 성숙도 모델 - 0단계

REST 성숙도 모델의 0단계에서는 단순하게 HTTP 프로토콜을 사용하기만 해도 충족된다. 물론 이러한 API를 REST API라고 할 수는 없고, REST API를 작성하기 위한 기본 단계라고 볼 수 있다.

📎 REST 성숙도 모델 - 1단계

REST 성숙도 모델에 따르면, 1단계에서는 개별 리소스(Resource)와의 통신을 준수해야 한다. 즉, 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야하고 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다.

0단계에서는 요청에서의 엔드포인트로 모두 /appointment를 사용하였지만 1단계에서는 요청하는 리소스가 무엇인지에 따라 각기 다른 엔드포인트로 구분하여 사용하였다.

엔드포인트 작성 시에는 동사, HTTP 메서드, 혹은 어떤 행위에 대한 단어가 아닌 리소스에 집중해 명사 형태의 단어로 작성하는 것이 바람직하다.

❗️ 리소스 사용 실패 / 성공

추가로 리소스 사용에 관한 정보와 더불어 사용 실패/성공 여부도 반환해야한다.

📎 REST 성숙도 모델 - 2단계

앞서 0단계와 1단계 예시에서는 모든 요청을 CRUD와 상관없이 POST 메서드를 사용하고 있다. REST 성숙도 모델 2단계에서는 CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것이 핵심이다.

예약 시간을 조회(READ)하기 위해 GET 메서드를 사용하고, 특정 시간에 예약을 생성(CREATE)하기 위해 POST 메서드를 사용하였다.

❗️ HTTP 메서드를 사용할 때 주의할 점

  • GET 메서드는 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다.
  • POST 메서드는 요청마다 새로운 리소스를 생성하고 PUT 메서드는 요청마다 같은 리소스를 반환하므로 잘 구분해서 사용해야 한다.
  • PUT은 교체, PATCH는 수정의 용도로 사용한다.

📎 REST 성숙도 모델 - 3단계

마지막 3단계는 HATEOAS(Hypermedia As The Engine Of Application State)라는 약어로 표현되는 하이퍼미디어 컨트롤을 적용한다. 3단계의 요청은 2단계와 동일하지만, 응답에서 리소스의 URI를 포함한 링크 요소를 삽입하여 작성해야 한다.

응답에 들어간 링크 요소는 응답을 받은 다음에 할 수 있는 다양한 액션들을 위해 많은 하이퍼미디어 컨트롤을 포함하고 있다. 3단계에서는 이렇게 응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것이 3단계의 핵심이다.

📌 Open API

오픈 API(Open Application Programming Interface)는 개발자라면 누구나 사용할 수 있도록 공개된 API를 말한다. 즉, 웹 사이트에서 자신이 가진 기능을 이용할 수 있도록 공개한 프로그래밍 인터페이스를 오픈 API라고 정의할 수 있다.

📌 API Key

API Key는 API를 호출하는 프로젝트를 식별하는 데에 사용된다. 또한 호출하는 애플리케이션에 API를 호출하는 액세스 권한이 부여되었고 프로젝트에서 API가 사용 설정되었는지 여부를 확인한다.

profile
hello world!

0개의 댓글