❑ REST API

 

➤REST API 란?

 

REST는 Representational State Transfer의 약자

로이 필딩의 박사학위 논문에서 웹(http)의 장점을 최대한 활용할 수 있는 아키텍처로 처음 소개됨

데이터나 리소스를 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

API는 쉽게 말해서 app끼리 소통하게 해주는 것이다.

 

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

 

REST API를 작성할 때는 몇 가지 지켜야 할 규칙들이 있음

REST 방법론을 보다 더 실용적으로 적용하기 위해 레오나르드 리차드슨(Richardson)이 REST API를 잘 적용하기 위한 4단계 모델(0~3단계)를 만들었다.

로이필딩은 이 모델의 모든 단계를 충족해야 REST API라고 부를 수 있다고 주장했지만

실제로 3단계까지 지키기 어렵기 때문에 2단계 까지만 지켜도 좋은 API 디자인이라고 볼 수 있음

2단계 까지 지킨 경우에 HTTP API라고도 부른다.

 

 

➤ Richardson의 REST 성숙도 모델 구조화

 

REST API 성숙도 모델

 

▶️ REST 성숙도 모델 - 0단계 : HTTP 사용

 

0단계에서는 단순히 HTTP protocol을 사용하기만 해도 된다.

이 단계만 작성한 경우 REST API라고 할 수는 없다.

0단계는 좋은 REST API를 작성하기 위한 기본 단계이다.

 

 

▶️ REST 성숙도 모델 - 1단계 : 개별 리소스와의 통신을 준수

 

REST API는 웹에서 사용되는 모든 데이터나 자원을 HTTP URI로 표현한다.

그래서 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야 하고

받은 자원에 대한 정보를 응답으로 전달해야 한다.

위의 0단계는 모든 요청에 endpoint를 모두 같게 할 수도 있지만

1단계에서는 요청하는 리소스가 무엇인지에 따라 각각 다른 엔드포인트로 구분해서 사용해야 한다.

 

※ 엔드포인트 작성 요령

  • 동사, HTTP 메서드, 어떤 행위에 대한 단어 사용은 지양
  • 리소스에 집중해 명사 형태의 단어 사용

 

요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 성공/실패 여부를 반환해야함

 

 

▶️ REST 성숙도 모델 - 2단계

 

CRUD에 맞게 적절한 HTTP 메서드 사용을 중점에 둠

GET : 서버의 데이터를 변환시키지 않는 요청에 사용

POST : 요청마다 새로운 리소스를 생성

PUT : 요청마다 리소스를 반환, 매 요청마다 같은 리소스를 반환하는 특징을 멱등성(idempotent)이라고 함

PUT : 교체 PATCH는 수정 용도로 사용

 

※ 더 자세한 내용

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods

 

2단계 까지 적용하면 잘 작성된 API라고 여긴다.

REST 3단계까지 따라야 REST API라고 부를 수 있다고 로이 필딩은 주장하지만

3단계까지 적용하는 경우는 극히 드물다.

따라서 반드시 3단계까지 적용해야 하는 것은 아니다.

 

 

▶️ REST 성숙도 모델 - 3단계

 

HATEOAS(Hypertext As The Engine Of Application State)

하이퍼미디어 컨트롤 적용

요청은 2단계와 동일

응답에서 리소스의 URI를 포함한 링크 요소를 삽입하여 작성한다는 점이 다르다.

응답에 새로운 링크를 넣어 기능에 접근할 수 있도록 함

 

 

※ 그 외 API 작성 디자인(추후 공부)

 

  • 5 Basic REST API Design Guidelines
  • 호주 정부 API 작성 가이드
  • 구글 API 작성 가이드
  • MS의 REST API 가이드 라인

 

 

❑ Open API와 API Key

 

➤ Open API

 

누구에나 열려있는 API

누구에게나 열려있다고 해서 무제한으로 이용할 수 있는 것은 아니다.

어떤 API는 이용 수칙에 따라 제한사항(가격, 정보의 제한)이 있을 수 있다.

정부에서 제공하는 공공데이터 포털에 접속하면 원하는 키워드의 API를 확인할 수 있다.

대표적인 Open API에는 날씨 API가 있다.

 

 

➤ API Key

 

API를 이용하기 위해서는 API Key가 필요하다.

API Key는 서버의 문을 여는 열쇠라고 볼 수 있다.

로그인된 이용자에게만 자원에 접근할 수 있는 권한을 API Key 형태로 제공한다.

데이터를 요청할 때마다 API Key를 같이 전달해야 원하는 응답을 얻을 수 있다.

 

 

 

❑ Postman으로 API 실습하기

 

Postman : https://www.postman.com/

 

Postman API Platform | Sign Up for Free

Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.

www.postman.com

 

HTTP API 테스트 도구 (CLI)

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

HTTP API 테스트 도구 (GUI)

  • Postman
  • Insomnia

 

https://openweathermap.org/

 

Сurrent weather and forecast - OpenWeatherMap

Access current weather data for any location on Earth including over 200,000 cities! The data is frequently updated based on the global and local weather models, satellites, radars and a vast network of weather stations. how to obtain APIs (subscriptions w

openweathermap.org

 

크롬 브라우저 검색창에 입력해서 결과 같은지 확인한다.

JSON 형태의 결과값을 정리해서 보여주는 확장프로그램을 사용했다. (JSON Viewer)

크롬 브라우저 결과

{
    "coord": {
        "lon": 127.4167,
        "lat": 36.3333
    },
    "weather": [
        {
            "id": 802,
            "main": "Clouds",
            "description": "scattered clouds",
            "icon": "03d"
        }
    ],
    "base": "stations",
    "main": {
        "temp": 296.12,
        "feels_like": 295.7,
        "temp_min": 296.12,
        "temp_max": 296.12,
        "pressure": 1010,
        "humidity": 47,
        "sea_level": 1010,
        "grnd_level": 1004
    },
    "visibility": 10000,
    "wind": {
        "speed": 1.15,
        "deg": 274,
        "gust": 0.98
    },
    "clouds": {
        "all": 45
    },
    "dt": 1654665772,
    "sys": {
        "type": 1,
        "id": 8131,
        "country": "KR",
        "sunrise": 1654632758,
        "sunset": 1654685173
    },
    "timezone": 32400,
    "id": 1835224,
    "name": "Daejeon",
    "cod": 200
}

 

Postman weatherAPI 결과

 

 

 

 

 

읽어주셔서 감사합니다. 좋은하루 보내세요😍

오개념에 대한 지적은 언제나 환영입니다.