Skip to content

Latest commit

 

History

History
158 lines (119 loc) · 10.8 KB

[의정]자유주제.md

File metadata and controls

158 lines (119 loc) · 10.8 KB

API에 대한 기본 개념 그리고 REST API with SPRING

목차

  1. API란?
  2. 잠깐! 저의 오해!!
  3. REST API란?
  4. REST API with spring
  5. 저기요 REST API는 데이터베이스가 아니에요!

API란?

API 정의(in 위키백과)

  • API(Application Programming Interface 애플리케이션 프로그래밍 인터페이스)
  • 컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다.
  • 어떤 서버의 특정한 부분에 접속해서 그 안에 있는 데이터와 서비스를 이용할 수 있게 해주는 소프트웨어 도구


쉽게 알아보자면?
상상해보자 우리는 지금 멋진 레스토랑에 있다. 점원이 가져다준 메뉴판을 보면서 먹음직스러운 스테이크를 고르면, 점원이 주문을 받아 요리사에 요청을 할 것이다. 그러면 요리사는 스테이크를 만들어 점원에게 주고, 여러분은 점원이 가져다준 맛있는 음식을 먹을 수 있게 된다.

  • 여기서 점원의 역할에 집중해보자. 점원은 손님에게 메뉴를 알려주고, 주방에 주문받은 요리를 요청한다. 그다음 주방에서 완성된 요리를 손님께 다시 전달한다. 즉 API는 점원과 같은 역할을 한다.
  • API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용프로그램)와 상호작용하여 요청된 메뉴(명령에 대한 값)를 전달한다.
  • API를 키보드라고 봤을 때 어떤 키를 누르느냐에 따라 화면이 달라지는 것처럼 명령(키보드의 키를 누름)을 받으면 명령에 대한 값(키보드의 키 event에 대한 화면)을 전달한다.
    ✅ 결론 : ❗API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체❗


API의 역할은?

  1. API는 서버와 데이터베이스에 대한 출입구 역할을 한다.
    : 모든 사람들이 이 데이터베이스에 접근하면 안된다. API는 이를 방지하기 위해 서버와 데이터베이스에 대한 출입구 역할을 하며, 허용된 사람들에게만 접근성을 부여해준다.

  2. API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
    : 여기서 애플리케이션이란 우리가 흔히 알고 있는 스마트폰 어플이나 프로그램을 말한다. API는 애플리케이션과 기기가 데이터를 원활히 주고받을 수 있도록 돕는 역할을 한다.

  3. API는 모든 접속을 표준화한다.
    : API는 모든 접속을 표준화하기 때문에 기계/ 운영체제 등과 상관없이 누구나 동일한 액세스를 얻을 수 있다.



😋 잠깐! 저의 오해!!



REST API란?

REST
image

  • REST는 Representational State Transfer라는 용어의 약자, 네트워크를 통해서 컴퓨터들끼리 통신할 수 있게 해주는 아키텍처 스타일을 의미
  • REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다. HTTP URI를 통해 자원을 명시하고, HTTP Method (POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD[Create(생성), Read(읽기), Update(갱신), Delete(삭제)] OPERATION을 적용하는 것을 의미한다.
    image
  • 웹의 모든 자원에 고유한 ID인 HTTP URI 를 부여한다.


REST API

  • REST 아키텍쳐를 준수하는 서비스. 간단하게 말하면 데이터를 요청하는 방식이 고정되어 있고, 요청에 따라 데이터를 처리하고 전달하는 작업만 수행

- 일반적인 서비스의 경우 요청받은 내용을 처리하고 데이터를 가공해서 처리 결과를 특정 플랫폼에 적합한 형태의 View로 만들어 되돌려주는 반면, Restful 서비스(REST API를 사용)에서는 그냥 데이터만 처리하고 끝내거나 되돌려줄 데이터가 있다면 JSON이나 XML 형식으로 전달. 사용자 플랫폼과 View에 상관하지 않고 요청한 데이터만 응답 - 요청하는 클라이언트는 규칙에 맞게 작업을 요청하고, 서버는 어떤 플랫폼에서 어떻게 사용할 것인지 신경쓰지 않고 요청받은 데이터만 처리하고 만들어서 되돌려주면 된다. 클라이언트는 받은 데이터를 알아서 가공해서 사용한다. 즉, 멀티 플랫폼에서 사용이 가능하다!!!

클라이언트 -> 서버 요청 규칙
출처

  • URI를 통해 자원을 명시할 때 @PathVariable 어노테이션을 통해 "URL/coco" 방식으로 URI에 필요한 데이터를 넣어 전송
  • Restful에서는 HTTP Method의 타입으로 어떤 작업을 해야하는지 판별

서버 -> 클라이언트 응답 코드
데이터 자체는 JSON이나 XML 형태로 보내주면 되지만 처리 결과는 상태코드로 보내주면 되는데, 역시 HTTP의 상태코드를 그대로 사용

서버 -> 클라이언트 응답 데이터

  • 데이터는 보통 JSON(JavaScript Object Notation)과 XML의 두 가지 형식을 사용해서 주고 받는다.
  • JSON은 XML보다 훨씬 나중에 나온 경량의 데이터 교환 형식. 자바스크립트 문법을 확장해서 나온터라 XML에 비해 훨씬 경량화되고 사용하기도 쉽고 문법이 간결함하고 더 빠르기도 하다.



REST API with spring

REST API 만들기
간단하게 String 문자 하나를 파라미터로 받아서 변형시킨 뒤 반환해 주는 API를 만들 것이다!!

  • 입력 파라미터 : String
  • Return : String
  1. Spring Boot 프로젝트를 생성한다.
  2. 클래스를 하나 만들고, 클래스에 @RestContoller 어노테이션을 붙여준다.
  3. 기능을 수행할 메소드에 @RequestMapping 어노테이션을 붙여 REST API를 받을 요청명을 Mapping해주면 끝!
@RestController
public class RestTestController {
    
    @RequestMapping("/restTest") // url 뒤에 restTest가 붙으면 다음 메소드 실행! 
    public String restTest(@RequestParam String str){
        return str + " : Rest Test 완료!!!";
    }
 
}

서버를 띄우고 브라우저에 "http://localhost:포트/restTest?str=test12345 " 를 입력해 제대로 반환 하는지 테스트 해 보자.
image

REST API 호출하기
이렇게 만들어 놓은 REST API를 다른 Spring 서버에서 호출해서 사용해 보자. 새로 만든 Spring 프로젝트에서 REST API를 호출!

  1. RestTemplate에 MessageConverter를 셋팅한다. (여기서 RestTemplate란 스프링에서 REST 리소스와 상호작용 하기 위한 메서드 제공해주는 템플릿)
  2. map 에 parameter를 셋팅한다.
  3. restTemplate의 메소드로 REST API를 호출한다.
// RestTemplate 에 MessageConverter 세팅
    List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>();
    converters.add(new FormHttpMessageConverter());
    converters.add(new StringHttpMessageConverter()); // 지원하는 오브젝트 타입은 String, 파라미터에 사용할 경우 HTTP 본문을 그대로 String으로 가져올 수 있음

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setMessageConverters(converters);
 
    // parameter 세팅
    MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
    map.add("str", "thisistest");
 
    // REST API 호출
    String result = restTemplate.postForObject("http://localhost:8082/restTest/", map, String.class);
    System.out.println("------------------ TEST 결과 ------------------");
    System.out.println(result);

이 코드가 실행되면, "REST API 만들기" 에서 만든 서버의 메소드를 URL을 통해 호출해 결과를 얻어 올 수 있다.
image

참고 REST API를 만드는 또 다른 예시 (https://codevang.tistory.com/261?category=849481)
이 사이트로 들어가보면 위의 코드와 예시의 코드가 API를 만드는 방법이 다르다는 것을 알 수 있는데 @Controller라고 붙이는 경우 @ResponseBody를 꼭 써줘야 하고 @RestController라고 붙인 경우 @Controller + @ResponseBody가 합쳐진 거라 @ResposeBody 없고 Mapping만 해줘도 된다~~



저기요 REST API는 데이터 베이스가 아니에요!

https://doublem.org/guys-rest-apis-are-not-databases/