Rest API / Rest 성숙도 모델 / Open API / API key

seunghyo·2023년 3월 29일
0
post-thumbnail

💡 Rest API


  • Rest(Representational State Transfer) API
    클라이언트와 서버가 HTTP 통신을 할 때는 어떤 요청을 보내고 받느냐에 따라 메서드의 사용이 달라진다. 요청과 응답을 할 때, '제대로 보내고 받을 수 있는' 일종의 규약이 존재한다. REST API는 웹에서 사용되는 데이터나 자원을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식이다. 클라이언트와 서버 사이에는 일종의 메뉴판이 존재하게 된다. 그 메뉴판을 통해서 정해진 양식에 맞춰 서로 소통할 수 있는 것이다. HTTP 프로토콜을 통해 리소스를 잘 전달하려면 잘 디자인된 메뉴판(REST API)가 필요할 것이다.

REST 성숙도 모델은 총 4단계(0~3단계)로 나누어진다.
이 모델의 모든 단계를 충족해야 REST API라고 부를 수 있지만 실제로 엄밀하게 3단계까지 지키기 어렵기 때문에 2단계까지만 적용해도 좋은 API 디자인이라고 볼 수 있고, 이런 경우를 HTTP API 라고도 부른다. REST API는 웹에서 사용되는 모든 데이터나 자원(Resource)을 HTTP URI로 표현한다

💡 Rest 성숙도 모델


0️⃣ 0단계

HTTP 프로토콜을 사용. 물론 이 경우, 해당 API를 REST API라고 할 수는 없으며, 0단계는 REST API를 작성하기 위한 기본 단계이다.

1️⃣ 1단계

개별 리소스(Resource)와의 통신을 준수해야 한다. 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야하며(0단계에서는 요청에서의 엔드포인트로 모두 /appointment를 사용) 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다.

🌟엔드포인트 (Endpoint) 작성밥법

  • 엔드포인트 작성방법 : 리소스에 집중해 명사 형태의 단어로 작성하는 것이 바람직하다.
  • 지양해야하는 방법: 동사, HTTP 메소드, 혹은 어떤 행위에 대한 단어 사용은 지양한다.

2️⃣ 2단계(HTTP API)

CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것에 중점을 둔다.REST 성숙도 모델의 2단계까지 적용하면 대체적으로 잘 작성된 API이다.

0단계와 1단계에서는 모든 요청을 CRUD(Create, Read, Update, Delete)와 상관없이 POST 메서드를 사용 => REST 성숙도 모델 2단계에 따르면, 이는 CRUD에 따른 적합한 메서드를 사용한 것이 아님

  1. 예약 가능한 시간을 확인한다는 것 = 예약 가능한 시간을 조회(READ)하는 행위를 의미
  2. 특정 시간에 예약한다는 것 = 해당 특정 시간에 예약을 생성(CREATE)한다는 것과 같습니다.
    3. 조회(READ)하기 위해서는 GET 메서드를 사용하여 요청 => GET 메서드는 body를 가지지 않기 때문에 query parameter를 사용하여 필요한 리소스를 전달
  3. 예약을 생성(CREATE)하기 위해서는 POST 메서드를 사용하여 요청 => 응답 코드는 201 Created 로 명확하게 작성 => 관련 리소스를 클라이언트가 Location 헤더에 작성된 URI를 통해 확인

3️⃣ 3단계(HTTP API)

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

💡 Open API & API key


OPEN API

정부에서 제공하는 공공데이터 포털에 접속해 원하는 키워드를 검색하면, 해당 키워드와 관련된 API를 확인 가능! 누구에게나 열려있는 API API마다 정해진 이용 수칙이 있고, 그 이용 수칙에 따라 제한사항(가격, 정보의 제한 등)이 있을 수 있다.

API key

API를 이용하기 위해서는 API Key가 필요. API key는 서버의 문을 여는 열쇠. 서버를 운용하는 데에 비용이 발생하기 때문에 서버 입장에서 아무런 조건 없이 익명의 클라이언트에게 데이터를 제공할 의무는 없다. (가끔 API key가 필요하지 않은 경우도 있습니다.)
API Key가 필요한 경우에는 로그인한 이용자에게 자원에 접근할 수 있는 권한을 API Key의 형태로 제공하고, 데이터를 요청할 때 API key를 같이 전달해야 원하는 응답을 받을 수 있다.

0개의 댓글