protocol과 API
Protocol
- 통신을 위한 규약, 전송되는 데이터의 항목/순서/표현법을 정의
API
- API : appilcation programming interface
-
한 프로그램에서 다른 프로그램으로 데이터를 주고 받기 위한 방법
Ex) 식당 메뉴판 = 식당의 API = 식당과 손님이 음식을 주고 받기 위한 방법 웹툰 목록 = 웹툰 서비스 API = 웹툰서버와 손님이 웹툰을 주고 받기 위한 방법 즉 API는 메뉴판! 근데 방법은 뭐냐 -> 방법은 다음 GET code로 구현 -> url 요청하는 부분을 coding
- 요청 방식, 요청 자료, 자료 요청에 필요한 추가 정보(id, user 정보)
-
REST API는 web에서 사용되는 대표적인 API
그럼 user는 API 즉 메뉴판을 보고 원하는 무엇을 받기 위한 GET 요청 code를 짜야함 알보고면 브라우저 url 창에 적히는 모든 것들이 API 요청과 동일함. 근데 이걸 모든 페이지를 들어가기 위해 사용하는 건 아니잖아? 즉, dashboard에서는 이러한 API 요청을 버튼으로 구현해 놓은 것.
- 하드웨어에서 interface는 연결되었을 때 해당 interface에 맞는 역할을 기기들이 수행하게됨 (충전, 파일이동 등등)
- 소프트웨어에서는? 내가 발명하지 않은 서비스를 사용하기 위해서 서비스의 API를 통해 정보를 받아 내 기기에서 사용할 수 있다. 즉, 내가 발명하지 않아도, API를 맞추면 다양한 서비스를 사용할 수 있다는 것.
REST API
API란 두 소프트웨어가 서로 요청과 응답을 주고 받을 때 요청을 보내는 방법, 응답하는 방법에 대해 메뉴판 처럼 정해두는 것이다.
RESTful API는 API 중 가장 널리 사용되는 API로, HTTP에서 필요한 자원에 접근할 때 웹의 장점을 최대한 활용하기 위한 architecture이다.
- RESTful API특징
-
url이 ‘어떤 자원’에 관한 것인지 표현해야하고, 그것만 표현하는 것이 있다. 즉, 무엇을 하는가?에 대한 정보는 url에 포함되지 않아야 하며, 작업의 종류는 HTTP method로 표현된다.
-
사용하는 HTTP의 method에는 GET, DELETE, POST, PUT, PATCH가 있다. 먼저 (GET, DELETE), (POST, PUT, PATCH) 두 묶음으로 나눌 수 있는데, 1번 묶음 보다 2번 묶음이 더 많은 내용을 담을 수 있다.
-
method와 uri만 보고도 해당 API가 어떤 기능을 하는지 쉽게 파악할 수 있다는 것이 장점이다.
-
RESTful API의 요청과 응답에는 JSON이 많이 사용되는데, 이는 구조화된 데이터 표현이 가능하면서도 가볍기 때문이다.
-
HATEOAS(Hypermedia As The Engine Of Application state)
각 요청의 응답에 가용한 다른 요청의 정보도 포함시켜 개발자가 따로 찾아보지 않을 수 있게 정보를 첨부함.
-
GET 요청 예시 -> kfadapter_main.py의 @APP.route(“/pipelines”, methods=[‘GET’])
client가 kfadpater 서비스에 GET method를 사하여 http://: /pipelines 엔드포인트에 요청을 보내면, 해당 서비스에서는 해당 pod 내부에서 이 코드를 실행시켜 얻은 값을 client에 응답으로 보냄. 즉, client가 read하는 것. -
POST 요청
client가 서비스에 POST method를 사용하여 엔드포인트에 upload 하고 싶은 데이터와 함께 요청을 보내면, 해당 서비스는 해당 pod 내부에서 코드를 실행시켜 데이터를 upload함. 즉 client가 create하는 것. 만약 방금 client가 등록한 정보를 client가 보고 싶다면 GET 요청을 통해 살펴볼 수 있음. -
PUT, PATCH 요청
두 가지 모두 수정이기 때문에 특정 항목에 대한 정보가 uri에 포함됨. PUT 요청은 특정 항목의 정보를 전체적으로 대체할 때 사용되고, PATCH요청은 정보 중 일부만 수정할 때 사용됨. -
DELTE 요청
삭제할 항목만 적어주면 되기 때문에 용량이 작으며, 삭제할 항목에 대한 정보가 uri에 포함됨