생활코딩 WEB

REST API - 기계들의 대화법

finepiz 2021. 11. 8. 15:15

(옮)

--------------------------------------------------------------------------------------------------------------------

https://youtu.be/PmY3dWcCxXI

기계들의 대화법 - REST API

REST APIHTTP를 이용해서 기계들이 통신을 할 때 HTTP가 가지고 있는 기능을 최대한 활용해서 명확하면서 단순하게 통신할 수 없을까?하는 고민에서 출발한 모범사례라고 할 수 있습니다. 이 수업에서는 REST API가 무엇이고, REST API가 현실에서는 어떻게 활용하는지를 구체적인 예제를 통해서 알아보는 수업입니다. 이 수업은 HTTP 입문 수업에 의존하고 있습니다. HTTP를 전혀 모르신다면 아래 수업을 먼저 보실 것을 권해드립니다.

 

기계와 기계가 웹을 이용해서 통신을 할 때, 정해진 규칙이 있다면 얼마나 좋을까?

그렇게되면 통신 규칙을 어떻게 정할것인가 에 대해 덜 고민할 수 있을 것.

 

기계과 기계가 규격화된 방식으로, 인터넷으로, 웹을 이용해서 통신할 수 있도록 돕는 통신 규칙인 REST API수업을 할 것. 얘는 웹의 통신규약인 HTTP를 이용함

 

API라는건 컴퓨터의 기능을 실행시키는 방법을 의미, 화면에 Hello World를 출력하는 방법은 언어마다 다름.

파이썬은 print(‘ ’)

자바스크립트는 document.write(‘hello world’)

printdocument.write 같은 하나하나가 API라고 할 수 있음.

 

REST API도 컴퓨터의 기능을 실행시키는 명령.

그런데 얘는 내컴퓨터가 아니라 남의 컴퓨터의 기능을 실행시킴.

->나의 앱이 이 주소로 접속하면 구글캘린더에 등록돼있는 나의 캘린더를 구글캘린더에서 이렇게 출력해줌.

->이 주소로 접속하면 트위터의 글을 가져올 수 있음. 져오는것만 아니라 내용을 추가수정삭제 가능.

인터넷과 웹을 통해 나의 컴퓨터를 제어할 때, 어떻게하면 시행착오를 줄이고 더 좋은  API를 만들 수 있는가에 대한 고민의 결과물의 REST API

REST API 는 특정기술을 의미하는게 아님.

HTTP를 이용해서 기계들이 통신을 할 때 HTTP가 가진 잠재력을 최대한 이용할 수 있도록 유도하기위한 말하자면 모범사례

 

블로그나 SNS를 했을때 하나하나의 글들을 갖고있을 것. 이런 데이터들을 REST API에선 Resource라고 한다

ResourceREST API로 표현하면 URI를 통해 표현됨.

이때 여러 개의 topic를 식별하고 싶다면 이런 URI를 사용하면 되고 이것을 Collection이라고함. Collection은 복수형을 사용합니다.

 

한건한건의 데이터는 Element(Element가 모여있는 것이 Collection)

Element에선 id값을 사용하는게 일반적 /1 처럼

이름으로 식별할 수 있다면 단수형으로 /rest 처럼 사용함.

 

uri는 단지 그 정보를 식별하는 이름. 이것만 갖고는 아무것도 할 수가 없다.

 

이 정보를 가공할 수 있어야한다.

굉장히 많아보이지만 사실 4가지뿐. CRUD.

 

이런 작업들을 REST API에선 method라고 부름.

 

REST APIHTTP를 이용하기 때문에 HTTP가 갖고있는 method를 이용함.

HTTP에서 Create를 위해 준비된 methodPOST

 

실제 웹app에서 form을 이용해서 데이터를 전송할 때 수정 생성 삭제할 때 모두 POST를 쓰지만 사실은 post는 생성을 위해 준비된 기능이었음.

 

REST APIhttp들의 메소드들을 본래 용도에 맞게 쓰자는것도 중요한 목표기 때문에

post는 생성을 위해 쓰기로 함

 

읽기는 get, 삭제는 delete

수정은 전체 내용을 교체 put / 부분을 변경하는 patch가 있음.

너무 추상적이죠?

지금부터는 웹브라우저에서 웹서버에 ajax를 위한 apifetch라는걸 이용해서 REST API를 이용하는 방법을 소개해보겠습니다.

 

웹브라우저 대신에 모바일 앱이나, 웹서버가 웹서버와 REST API를 이용해서 통신할 수도 있다.

실습 수업이 아니라 직접해볼 필요는 없지만 혹시 직접해보고 싶으면 깃허브 오셈

왼쪽은 REST API를 제공하는 서버의 데이터 상태

오른쪽에는 서버에 접속해서 이런저런 일을 하려고 하는 클라이언트(웹브라우저)

 

서버에는 두 개의 resource가 있다. topic comments

topic 리소스에는 id, title, body 로 구성된 글이 있음.

 

comments에서 topicId1 이면 위에 쟤임. 토픽에 속해있는 댓글 2개가 들어있는 상태.

 

저 데이터, 다른말로는 stateREST API로 표현하고, 생성하고 수정, 삭제할것인가

 

실험실에는 왼쪽의 REST API를 제공하는 서버에 JS를 이용해서 생성읽기수정삭제 관계를 표현하는 방법을 구현해놨음. 코드는 중요한게 아님. ajax - fetch 수업으로 알아들을 수 있음.

 

중요한건 어떻게 브라우저와 서버가 통신하는가

 

검사 - Network - Esc로 서버쪽에서 만들어진 데이터를 콘솔창에 표시하게 할 것.

 

리소스를 생성부터

{ }JSON의 형태로 바꿀 것 이라고 했으니(stringify가 그건가봐)

그러니까 서버한테 내가 만든 데이터는 JSON이야 라고 content-type에 씀.

이때 중요한건 topics라고 하는 리소스에 추가할 것.

그러니까 api의 주소는 ‘topics’라고 쓴 것 리소스의 식별자

우리는 생성하려고 하는거니까 mehodPOST, HTTP프로토콜에서 POST기 때문

 

라고 하는게 REST API의 권고안, json같은건 그냥 선택 xml쓸 수도

 

중요한건 데이터 리소스는 uri를 통해 식별한다.

어떤 행위를 할 땐 method의 이름을 적당히 HTTP의 규정대로 사용한다 가 핵심.

 

저 코드를 실행시키면 데이터가 추가되고, Console에 출력됨

 

저 오른쪽 아래에 topics를 누르면 자세하게 들여다볼 수 있다. 클라와 서버가 통신한 내용

 

어떻게 REST API를 이용했을 때 HTTP RequestResponse가 이루어지는가.

 

1030초부터

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

--------------------------------------------------------------------------------------------------------------------