동글이기가 레포

REST API는 HTTP의 메소드, URI로 이루어진 API서버이다.

그에 따라 Request와 Response가 필요한데, Request에 필요한 파라미터와 Response의 값들을 구성해야 한다.

 

HTTP Method : 행위(Action)

URI : 자원(Resource)

HTTP Message Body : 표현(Representations)

 

보통 https://ip주소:port/api/items/~~ 로 주소를 만든다.(end-point)

이를 URI라고 하는데, URL과의 차이점은

URL : 특정 자원이 있을 때, 어떤 파일이나 자원의 위치를 나타내는 것

URI : 문자열 식별

 

URI는 HTTP에 대한 행휘에 대해서는 HTTP Method가 수행하고 있기 때문에 동사를 사용하지 않고 명사를 사용해야 한다.

(동사를 URI에 사용하면 혼동을 줄 수 있음)

 

명사를 사용할 때에도 복수형태로 사용하는 것이 좋은데, API 규격을 설계하고 나서 사용을 하게 되면 보통 DB에서 데이터들을 가져올 수 있는데

일반적으로 여러 개의 데이터가 있기 때문이다.

이는 컬렉션이라는 것을 명확하게 알려주는 행위이며, 여러 개의 데이터를 가져오게 된다면 하위 트리를 단수로 표현하면 된다.

 

// 만약 GET이라면
GET https://localhost:port/api/items
content-type: application/json

 

위에서 명사만을 사용하는 것이 좋다고 언급했었는데, 명사에서도 지양해야 하는 것들이 있다.

예를 들면, SQL 쿼리문에서 사용하는 order, group과 같은 것은 이미 존재하는 키워드이기 때문에 혼동을 줄 수 있다.

 

다음으로 HTTP Method는 흔히 말하는 CRUD로 정리할 수 있다.

Method GET(READ) POST(CREATE) PUT(UPDATE) DELETE(DELETE)
/items item 목록 보기 item 추가 x x
/items/{key} key에 할당된 item 보기 x key에 할당된 item 수정 key에 할당된 item 삭제

 

만약 items 중에서 원하는 값이나 형태로 보고 싶다, SQL상 where절이나 order by 등의 조건을 사용하여 처리를 해야한다.

흔히들 JPA에서 제공하는 Pageable을 이용한다.

// 만약 GET이라면
GET https://localhost:port/api/items?page=0&size=10&sort=desc
content-type: application/json

page나 size, sort 파라미터는 Pageable에 존재하는 변수들로, 파라미터에 값을 넣어서 원하는 데이터를 추출한다.

 

 

Spring boot를 이용한 REST API 서버 개발

Spring boot를 이용하여 REST API를 간단하게 구현할 수 있다.

방법은 두 가지가 있는데

1. MVC패턴

2. Spring boot data rest를 활용

 

1번의 경우 Model, View, Controller를 구성하여 설계하는 방식으로 Controller, Service(DAO), repository로 나누어서 데이터의 처리를 세분화 하는 것이다.

 

기존의 Spring MVC와 REST API의 차이점은 반환 형식인데, MVC는 HTML이고 REST API는 xml이나 json형태이다.

 

spring boot data rest는 REST Repository하나만으로도 DB에서 CRUD를 수행하게 해주는 라이브러리이다.

MVC와는 달리 Controller, Service가 없으며 REST Repository내부의 CRUD메소드와 매핑하여 처리한다.

즉, MVC에서는 하나하나 다 구현을 해야했지만 spring boot data rest는 그럴 필요가 없다는 뜻이다.

(spring boot data rest를 사용한다고 하더라고 Controller나 Service 구현이 가능하긴 함)

 

 

 

(참고)https://blog.neonkid.xyz/219?category=814055

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading