TV에 있어서는 명령을 넣는 리모콘과 그 결과와 정보를 받아오는 스크린. 자판기에 있어서는 버튼. 즉 기계와 인간간의 소통 창구.
IT세계에는 UI(User Interface)이외에도 우리 눈에 직접 보이지 않는 영역이 더 많다. 그럼 여기에도 소통 창구가 필요하지 않을까?
프로그램과 또 다른 프로그램을 연결하는 사용자를 위한 제어장치.
내가 만든 서비스가 개인 개발자, 기업, 기관이 제공하는 기능, 프로그램을 사용할 수 있게끔 도와주는 중간 매개체.
소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단
예를 들어서 이야기해보면,
포털이나 날씨 정보를 제공하는 웹사이트는 기상정보가 관리되는 기상청 서버에서 날씨정보를 요청해서 받아간다. 이 때, 미리 작성된 소프트웨어를 통해 기상청 서버와 이 웹사이트 서버들이나 앱들 사이에서 필요한 날씨 정보들이 요청되고 전송되는 것인데,
이때는 기상청에게 정보를 요청하는 정확한 폼이 필요하다.
ex. Date:200709 | place:seoul | which:temperature
이런 지정된 형식을 바로 API라고 부른다.
또 다른 예로,
윈도우의 경우 개발자들이 프로그램을 개발할 때 시스템이나 하드웨어에 대한 세세한 지식 없이도 지정된 명령어로 윈도우에서 동작을 수행할 수 있는 Windows API를 제공 (—> 훨씬 개발이 편안~)
Frontend web에서 서버에 데이터를 요청하거나 배달앱에서 서버에 주문을 넣거나 할 때에 널리 사용된다. 이는 과거의 SOAP이란 복잡한 형식을 대체한 것.
RESTful API의 장점은 각 요청이 어떤 동작이나 정보를 위한 것인지가 해당 요청의 모습 자체에서 추론이 가능하게 한다는 점. 게다가 요청을 보낸 주소만으로도 대략 이게 뭐하는 요청인지 추론이 가능하므로 상당히 인수인계, 유지보수가 용이.
서버에 RESTful API로 뭔가 요청을 보낼 때는 HTTP라는 규약에 따라 신호를 전송하는데, HTTP로 받은 프론트엔드의 요청에 대한 값을 리턴할 때에 사용하는 다양한 메소드가 있다. 마치 우체국에서 등기를 보낼 때도 여러가지 형식(일반우편, 등기, 택배)이 있듯! 대표적으로 GET & POST! (+ get, delete보다는 body를 가지지고 있는 post, put, patch는 정보를 비교적 안전하게 감추어 비교적 많은 양을 보낼 수가 있다) 기능이 특정 용도에 제한되는것은 아니다. 즉 post만 사용해도 모든 기능(수정, 입력, 삭제)을 다 구현할 수 있으나, 누구든 각 요청의 의도를 쉽게 파악할 수 있도록 RESTful하게 API를 작성하는 것이 좋다.
ex. 어떤 개발자가 get 메소드로 https://(도메인)/classes/2/students하면 아 이요청은 뭔가를 읽기(Read)위한 요청이구나! 하고 짐작할 수 있어서 서로 좋은 것
ex. 어떤 개발자가 post 메소드로 https://(도메인)/classes/2/students 해서 바디에 새 학생의 정보를 실어 보내면, 아 이요청은 뭔가를 저장(Create)하기 위한 것이구나~ 하고 짐작 가능
참고로 이 때 인덱스는 정보가 추가되면서 생상되므로 포스트 요청에서 명시 필요 없음
ex. 어떤 개발자가 put, 또는 patch메소드로 Https://(도메인)/classes/2/students/14하고 보내면, 아 이 학생의 인덱스를 14로 수정(Update)하려고 하는구나 하고 알 수 있다 (수정할 정보는 바디에 실어 보낼것)
Post, put 하나로도 OK
용량이 적고 중요도가 낮은 것은 get 하나만으로도 OK
자원을 구조와 함께 나타내는 구분자는 URI라고 하는데,
위의 그림처럼 URI 뒤에 동사가 붙으면 정석에 비해 깔끔하지 않기 때문에
URI는 동사가 아닌 명사, 행위(메소드) 기준이 아닌 자원 기준으로 쓰여질 것을 규칙으로 한다.
<정리> RestfulAPI란,
- HTTP 요청을 보낼 때,
- 어떤 URI에 어떤 메소드를 사용할 지
- 개발자들 사이에서 널리 지켜지는 약속(컨벤션)
- 형식이기 때문에 기술에 구애받지 않음
정도가 내가 이해한 것!
후후
reference:
비전공자에게 단비와 같은 IT 설명 강자
유튜버 얄팍한 코딩사전
'REST API가 뭔가요?'
https://youtu.be/iOueE9AXDQQ