REST(Representational State Transfer)
- 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
- HTTP URI를 통해 자원(resource)을 명시하고
- HTTP Method(POST, GET, PUT, DELETE, PATCH 등)을 통해
- 해당 자원(URI : 통합자원식별자)에 대한 CRUD Operation을 적용하는 것
REST API(RESTful API / RESTful 웹 API)
- REST(Representational State Transfer) 아키텍처 스타일의 설계 원칙을 준수하는 API(Application Programing Interface)
- 애플리케이션을 통합하고 마이크로 서비스 아키텍처의 구성 요소를 연결하는 유연하고 가벼운 방법을 제공
- Client와 Server가 통신하는 방식 중 하나이며, HTTP UR를 통해 통신함
- 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미함
- 대부분 json 형식으로 주고받음
- OpenAPI를 제공하는 업체도 REST API를 제공
- 다만, API는 메뉴얼도 함께 제공되어야 함
-
자원을 이름으로 구분
: 자원(문서, 사진, 그림 데이터 등 SW가 관리하는 모든 것)을 HTTP URI(Uniform Resource Identifier)를 통해 명시
출처
-
해당 자원의 상태를 주고받음(요청 -> 응답)
: 클라이언트가 상태(정보)에 대한 조작을 요청하면 서버는 이에 적절한 응답(Representation)을 보냄
목적
- 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
- 근본적인 목적은 성능 향상이 아님
- 일관적인 컨벤션을 통한 API의 이해도 및 호환성 향상이 목적임 -> 성능이 중요한 상황에서는 사용하지 않아도 됨
- 표준이 존재하지 않고 사용할 수 있는 메소드가 제한적임에도 불구하고 편리함을 위해 사용함
구성 요소
- 자원(Resource) : HTTP URI
- 모든 자원에 고유한 ID가 존재. 이 자원은 server에 존재
- HTTP URI를 통해 자원을 구별하고 지정함
- 이후 해당 자원의 상태(정보)에 대한 조작을 server에 요청
- 행위(Verb) : HTTP Method
- HTTP 프로토콜의 method를 사용
- HTTP 프로토콜은 GET, POST, PUT, DELETE 등과 같은 메소드 제공
3.표현(Representation of Resource)
- client가 자원의 상태에 대한 조작을 요청하면 server는 적절한 응답 제공
- REST에서 하나의 자원은 JSON, XML, TEXT 등의 여러 형태를 응답 받을 수 있음
- 대부분 JSON으로 데이터를 주고받음
RESTful 하지 못하는 경우
- URI 규칙을 올바르게 지키지 않은 API
- CRUD 기능을 모두 POST 요청으로만 처리하는 API
- route에 resource, id 이외의 정보가 들어가는 경우
- URI에 행위에 대한 부분이 들어가는 경우
@RestController
@RestController
public class ApiController {
@GetMapping("/api/index")
public String index() {
return "api";
}
}
localhost~/api/index로 접속하면 api가 그대로 출력됨
jackson 라이브러리를 추가하면 객체를 알아서 json 형식으로 바꿔서 return해줌
아래 코드 pom.xml에 추가
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.1</version>
</dependency>
테스트
포스트맨으로 해도 되고, chrome 웹 스토어에서 Talend API Tester를 추가해 사용할 수도 있다.
https://chromewebstore.google.com/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm