API(Application Programming Interface 애플리케이션 프로그래밍 인터페이스, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 의미합니다.
조금더 쉽게 이해하기 위해서 실생활의 예를 들어보도록 하겠습니다.
위 그림을 보시면 API란 음식점의 키오스크라고 생각하시면 됩니다.
만약 피자를 사러 매장 안에 들어가서 키오스크로 메뉴를 선택하고 결제하면 그 내용이 주방으로 전달되어 음식을 받습니다.
즉 고객이 피자 주문이라는 Request를 API를 통해 요리사 한테 넘겨주면 요리사는 그 Request를 가지고 열심히 피자를 만들어서 API를 통해 고객으로 Response를 보내는겁니다.
다시 말해 API는 프로그램들이 서로 소통하는 방법입니다.
한번 네이버 쇼핑 오픈 API를 보면서 보겠습니다.
자 설명을 해보자면 네이버쇼핑에게 query에 해당되는 물건을 보여줘 라고 이해하시면됩니다.
음 그리고 Headers 라고 나와있는데 여기서 저 Headers는 이 API를 사용하는 사용자의 인증이라고 보시면됩니다.
X-Naver-Client-id는 그 사용자의 아이디고 X-Naver-Client-Secret는 사용자의 비밀번호입니다.
즉 이 인증과 관련된 내용도 같이 네이버 쇼핑 API에게 보내서 "나는 이 API를 사용해도되고 Iphone이라는 물건들을 나에게 줘!"라고 하는것과 같습니다.
자 그러면 네이버쇼핑API는 Response를 보내게 되겠죠?!
자 이런식으로 Iphone이라는 물건의 목록을 받아오는 것을 아실수 있습니다.
그러면 이제 조금더 들어가서 Restful API가 무엇인지 알아보도록 하겠습니다.
먼저 Restful의 Rest의 의미를 먼저 알아 보도록 하겠습니다.
HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource와 Method로 표현하여 특정한 형태로 전달하는 방식
즉, REST란 어떤 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행하기 위해 URI(Resource)로 요청을 보내는 것으로, Get, Post 등의 방식(Method)을 사용하여 요청을 보내며, 요청을 위한 자원은 특정한 형태(Representation of Resource)으로 표현됩니다.
그리고 이러한 REST 기반의 API를 웹으로 구현한 것이 RESTful API인데 예를 들어, 우리는 게시글을 작성하기 위해 http://localhost:8080/board 라는 URI에 POST방식을 사용하여 JSON형태의 데이터를 전달할 수 있습니다.
위와 같이 CRUD 연산에 대한 요청을 할 때, 요청을 위한 Resource(URI)와 이에 대한 Method(POST,GET,PUT,DELETE) 그리고 Representation of Resource(JSON)을 사용하면 표현이 명확해지므로 이를 REST라 하며, 이러한 규칙을 지켜서 설계된 API를 Rest API 또는 Restful한 API라고 합니다.
SPRING 예시를 같이 들면!
@PostMapping("/api/posts")
@ResponseBody
public Post createPost(@RequestBody PostDto postDto){
//serviceCreatePost는 DB에 포스터를 넣는다고 생각하시면됩니다.
return postservice.serviceCreatePost(postDto);
}
http://localhost:8080/api/posts 라는 URI(Resource)에 POST방식(Method)을 사용하여 포스터와 관련된 JSON형태로 데이터를 전달(Representation of Resource)한다라고 볼수있겠네요.