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
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 |