API(Application Programming Interface)란 간단하게 말해서 컴퓨터의 기능을 실행시키는 방법을 의미합니다. 제가 작성한 장고(Django) 관련된 글을 보면 아시겠지만... 회원가입, 로그인, 게시글 작성 등 모두 제각기 특정 기능을 담당하고 있는데 하나하나가 API인 것입니다. 클라이언트가 요청(request)을 하면, 백엔드 서버의 API들이 들어오는 요청에 맞는 기능을 실행하는 것이죠. 그리고 지정된 형식으로 적절한 응답(response)를 보내거나 보여줄 것입니다.
오픈 API를 많이 들어보셨을텐데, AWS Rekognition API를 사용하면 안면인식이 되지 않습니까? 이 API는 안면인식을 해서 감정을 추출하고, 나이를 맞추는 "기능"을 하는 것입니다. 그리고 웹 브라우저 역시 Web API를 통해 자바스크립트로부터 특정 동작들을 지시받기도 합니다. OS 역시 API들의 모음이라 할 수 있는데, 윈도우에서 어떤 명령어를 쳤을 때 특정 화면(기능 실행 결과)이 나오게 되는 이유는 그 명령어가 윈도우 API를 호출했기 때문이죠.
그렇다면 REST API란 무엇일까요?
결론부터 말하면 내 컴퓨터가 아닌 다른 사람의 컴퓨터(서버)의 기능을 실행시킬 때 사용되는 일종의 형식을 말합니다. 즉 구글 캘린더나 트위터의 특정 url에 접속해서 내가 원하는 정보를 받아오게 되면, 그쪽 서버의 API 기능을 실행하게 되는데, 이때 통일된 규칙이 있어야 다른 컴퓨터에서 제 요청을 알아들을 수 있겠죠.
특히, 인터넷과 웹을 통해 나의 컴퓨터를 제어할 때 어떻게 효율적으로 API를 동작시킬 수 있는가에 대한 고민의 결과가 REST API입니다. 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론 가능한 것이 큰 특징입니다. 예를 들자면 아래와 같습니다.
https://example.com/classes/1/students?sex=male
모든 반에 있는 학생들 중 남학생만 가져오는 구문이며, url만 보더라도 어떤 요청인지 추론할 수 있죠.
그리고 REST API는 기본적으로 HTTP를 이용하고, 소프트웨어 간 통신을 할 때 HTTP가 가진 잠재력을 최대한 이용할 수 있도록 유도한 것입니다. 말이 어려우니 예제를 봅시다!
장고를 예로 들어보겠습니다. 웹사이트에 작성된 게시글을 보여주는 url을 짠다고 합시다. DB 서버에는 아마 아래와 같은 테이블로 저장되겠죠? 참고로 이러한 테이블을 리소스(resource)라고 부릅니다.
id | title | body |
1 | scv | build |
2 | vulture | mine |
클라이언트에서 액세스할 수 있는 모든 종류의 개체 및 서비스를 모두 리소스라고 표현합니다.
여기서 전체 게시글을 보여주는 페이지의 url은 아마 http://example.com/boards (=Collection)가 될 것입니다. 이때 하나의 특정정 게시글만 보고 싶다고 할 경우, http://example.com/boards/1 (=Element)가 될 수 있습니다.
리소스 가공에는 크게 4가지 방법(method)이 있습니다. 많이 들어보셨을 CRUD로 아래와 같습니다.
"Create / Read / Update / Delete"
해당 CURD는 웹의 통신 규약인 HTTP method의 원래 기능을 최대한 이용하는 것으로, 해당 부분은 아래를 참고해주세요.
REST API method | HTTP method |
Create | Post(생성) |
Read | Get(읽기) |
Update | Put(전체 수정) | Patch(부분 수정) |
Delete | Delete(삭제) |
REST API는 서버와 클라이언트 간 어떤 데이터 타입을 사용해 통신할 것인지를 규정하지 않습니다. 이 데이터 타입은 보통 application/json 을 쓰는데, xml 등도 가능합니다. 클라이언트에서 서버에 요청을 보낼 때도 Content-Type을 명시해주고, 서버가 응답할 때도 알려줍니다.
(주의!!) REST API는 "형식"이기 때문에 기술에 제한받지 않습니다. 앱을 만들든, 웹을 만들든, 어떤 프로그래밍 언어로 만들던지 상관없이 소프트웨어 간 HTTP로 정보를 주고 받을 때 일정 형식을 준수하면 RESTful한 서비스를 만들 수 있습니다. 때문에 RESTful api guidline 같은 검색어로 구글링하면 다양한 자료가 많음을 발견할 수 있습니다.
아래 유튜브 영상 2개는 REST API가 무엇인지 비유를 들어 잘 설명하고 있습니다. 한 번 들어보시는 것을 추천드립니다.
'문돌이 존버 > 각종 꿀팁 및 해결법' 카테고리의 다른 글
np.asmatrix vs matrix 차이점 (0) | 2021.04.06 |
---|---|
Message: stale element reference: element is not attached to the page document 오류 해결 (0) | 2021.03.08 |
git repository pip install -r requirements.txt (0) | 2021.02.17 |
mysql_config not found 오류 해결법! (0) | 2021.02.17 |
apache zeppelin과 윈도우 Postgresql DB 연결 오류 해결 (0) | 2021.02.03 |