본문 바로가기

네트워크

REST API 와 Open API

REST

REST(“Representational State Transfer”) 는 http를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍쳐 입니다


REST API

REST API 는  REST 를 기반으로 서비스  API를 구현한 것 입니다


REST  API의 구성

REST API 는 자원(resource), 행위(verb),  표현(representations) 으로 구성됩니다

구성 요소 내용 표현 방법
자원(resource) 자원 URI (엔드 포인트)
행위(verb) 자원에 대한 행위 HTTP 요청 메서드
표현(representations) 자원에 대한 행위의 구체적인 내용 페이로드

REST 설계 원칙(성숙도 모델)

REST 설계 원칙은 총 4단계(0~3단계)가 있습니다

3단계까지 지키기 어렵기 때문에 2단계까지만 적용해도 좋은 API 디자인이라고 볼 수 있습니다


REST 성숙도 모델 - 0단계

0단계의 조건은 HTTP 프로토콜을 사용하는 것 입니다

아직까지는 REST API라고 보기는 힘들며 REST API를 작성하기 위한 기본단계라고 생각하시면 됩니다


REST 성숙도 모델 - 1단계

1단계에서는 개별 리소스(Resource)와의 통신을 해야됩니다

모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야하며 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 합니다

또한 리소스를 식별할 수 있는 이름은 동사보다는 명사를 사용해야 됩니다

나쁜 예시)

GET / getName/1

GET/ name/get/1

좋은 예시)

GET / name/1


REST 성숙도 모델 - 2단계

2단계에서는 CRUD(Create, Read, Update, Delete)에 맞게 적절한 HTTP 메서드를 사용해야 됩니다

자주 사용하는 http 요청 메서드로는 GET, POST, PUT, PATCH, DELETE가 있습니다

HTTP 요청 메서드 종류 목적 페이로드
GET index/retrieve 모든/특정 리소스 취득 X
POST create 리소스 생성 O
PUT replace 리소스 전체 교체 O
PATCH modify 리소스의 일부 수정 O
DELETE delete 모든/특정 리소스 삭제 O

 

예를들어 리소스를 취득하는 경우 GET을 사용해야되고 삭제하는 경우는 DELETE를 사용해야 됩니다

나쁜 예시) - GET를 사용해서 리소스를 삭제하려고 있습니다

GET / name/delete/1

좋은 예시)

DELETE /name/1


REST 성숙도 모델 - 3단계

HATEOAS(Hypertext As The Engine Of Application State)라는하이퍼미디어 컨트롤을 적용합니다.

응답에 리소스의 URI를 포함한 링크 요소를 삽입하여 작성해야 합니다.

예시)

Request

GET /api/users/1

Response

HTTP/1.1 200 OK

{
 "result" {
    "id": "1",
    "name": "honey",
    "_links": {
      "self" : {
        "href" : "https:/api/users/1"
      },
      "update" : {
        "href" : "https:/api/users/1"
      },
      "list" : {
        "href" : "https:/api/users/"
      },
  }
}

Open API

Open이 붙는 API라는것은 누구에게나 열려있는 API를 의미합니다

쉽게 말해 누구나 사용 할 수 있는 API입니다

 

<전세계 날씨를 알려주는 Open API로 날씨정보 수집하기>

https://leejoongwon.tistory.com/71?category=577073 

 

5) 파이썬 API으로 전세계 날씨정보 얻기

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import requests import json apikey = "API키 값을 입력하세요" cities = ["Seoul,KR", "Tokyo,JP", "New York,US"] api = "http://api.open..

leejoongwon.tistory.com

 

API Key

API를 사용하기 위해서 API Key가 필요한 경우가 있습니다

API  key가 필요한 경우에는 데이터를 요청할 때 API Key를 같이 전달해야 원하는 응답을 받을 수 있습니다

<파이썬 언어로 날씨정보 수집>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import requests
import json
 
apikey = "API키 값을 입력하세요"
 
cities = ["Seoul,KR""Tokyo,JP""New York,US"]
 
api = "http://api.openweathermap.org/data/2.5/weather?q={city}&APPID={key}"
 
k2c = lambda k : k - 273.15
 
for name in cities:
    url = api.format(city=name, key=apikey)
    r = requests.get(url)
    data = json.loads(r.text)
 
    print("-----------------------------------------")
    print(" # 도시=", data["name"])
    print(" | 날씨 =", data["weather"][0]["description"])
    print(" | 최저 기온 =", k2c(data["main"]["temp_min"]))
    print(" | 최고 기온 =", k2c(data["main"]["temp_max"]))
    print(" | 습도 =", k2c(data["main"]["humidity"]))
    print(" | 기압 =", k2c(data["main"]["pressure"]))
    print(" | 풍향 =", data["wind"]["deg"])
    print(" | 풍속 =", data["wind"]["speed"])
cs

'네트워크' 카테고리의 다른 글

폴트 톨러런트, 로드 밸런싱  (0) 2019.06.30
Looping 루핑  (0) 2019.06.30
클래스 풀 , 클래스 리스 , 서브넷 설계  (0) 2019.06.30
유니캐스트,브로드캐스트,멀티캐스트  (0) 2019.06.30
LAN 과 WAN  (0) 2019.06.30