* OPEN API (Application Programming Interface)
- OPEN API 는 프로그래밍에서 사용할 수 있는 개방되어 있는 상태의 interface(약속).
- OPEN API와 함께 거론되는 기술이 REST이며, 대부분의 OPEN API는 REST 방식으로 지원됨
- 데이터를 외부 응용 프로그램에서 사용할 수 있도록 OPEN API를 써야 하는데 외부 응용에서 어떤 방식으로 쓸지 모른다. 따라서 xml, JSON을 선호함
* REST(Representatilnal State Transfer)
- REST는 'Representatilnal State Transfer'의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송 방식을 결합해서 원하는 작업을 지정한다. URI + GET(read)/POST(create)/PUT(update)/DELETE(delete)
- 웹의 장접을 최대한 활용할 수 있는 아키텍쳐로 REST 탄생
- HTTP URI를 통해 제어할 자원(Resource)를 명시하고, HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원을 제어하는 명령을 내리는 방식의 아키텍쳐
* REST 구성
- 자원 (Resource): URI
- 행위(Verb): HTTP Method
- 표현(Representations)
잘 표현된 HTTP URI로 리소스를 정의하고 HTTP method로 리소스에 대한 행위를 정의한다.
리소스는 JSON, XML 과 같은 여러가지 언어로 표현될 수 있다.
* 기존 Service와 REST Service
- 기존 Service: 요청에 대한 처리를 한 후 가공된 data를 이용하여 특정 플래폼에 적합한 형태의 View(JSP)로 만들어서 반환한다.
- REST Service: data 처리만 한다거나, 처리 후 반환될 data가 있다면 JSON이나 XML(공용이라고 생각하면 된다) 형식으로 전달한다. View에 대해서는 신경 쓸 필요가 없어서 Open API에서 많이 사용한다.
* REST
- 기존의 전송 방식과는 달리 서버는 요청으로 받은 리소스에 대해 순수한 데이터를 전송한다.
- 기존의 GET/POST 외에 PUT, DELETE 방식을 사용하여 리소스에 대한 CRUD 처리를 할 수 있다.
- HTTP URI를 통해 제어할 자원(Resource)를 명시하며, HTTP METHOD(GET/POST/PUT/DELETE) 를 통해 해당 자원(Resource)를 제어하는 명령을 내리는 방식의 아키텍쳐이다.
* 기존의 웹 접근 방식과 REST API 방식의 차이점
작업 | 기존 방식 | REST 방식 | 비고 | ||
Create(Insert) | POST | /write.do | POST | /blog/hello | 쓰기 |
Read(Select) | GET | /view.do?id=hello&no=5 | GET | /blog/hello/10 | 읽기 |
Update(Update) | POST | /modify.do | PUT | /blog/hello | 수정 |
Delete(Delete) | GET | /delete.do?id=hello&no=5 | DELETE | /blog/hello/10 | 삭제 |
기존의 블로그 등은 GET과 POST만으로 자원에 대한 CRUD를 처리하며, URI는 액션을 나타낸다.
REST로 변경할 경우 4가지 메소드를 모두 사용하여 CRUD를 처리하며 URI는 제어하려는 자원을 나타냄
* REST 관련 Annnotation
Annotation | Descrption |
@RestController | Controller가 REST 방식을 처리하기 위한 것임을 명시 |
@ResponseBody | JSP 같은 뷰로 전달되는 것이 아니라 데이터 자체를 전달 |
@PathVariable | URL 경로에 있는 값을 파라미터로 추출 |
@CrossOrigin | Ajax 크로스 도메인 문제를 해결 |
@RequestBody | JSON 데이터를 원하는 타입으로 바인딩 |
* REST 작성 용법
- 정확한 문법과 표준이 존재하지 않음
- 하이픈은 사용 가능하나 언더바는 사용하지 않는다.
- URI 마지막에 /를 사용하지 않는다.
- / 로 계층 관계를 나타낸다.
- 확장자가 포함된 파일 이름을 직접 포함시키지 않는다.
- URI는 명사를 사용한다.
'Web' 카테고리의 다른 글
SPA(Single Page Application) (0) | 2021.05.19 |
---|---|
MVC vs MVVM (0) | 2021.05.12 |
메이븐(Maven) 이란? (0) | 2021.04.29 |
IoC(Inversion of Control)/DI (0) | 2021.04.29 |
Spring 개요 (0) | 2021.04.29 |