기록/BACKEND

[Spring] REST API

5월._. 2022. 4. 29.
728x90

1. REST API란

-  Representational State Transfer의 약어

-  HTTP URI를 통해 제어할 자원(Resource)를 명시하고, HTTP Method(GET,POST,PUT,DELETE)를 통해 해당 자원을 제어하는 명령을 내리는 방식의 아키텍처

-  서버는 요청으로 받은 리소스에 대해 순수한 데이터를 전송한다. 데이터처리만 하거나, 처리 후 반환될 데이터가 있다면 JSON이나 XML형식으로 전달한다. 

-  GET/POST 외에 PUT, DELETE 방식을 사용해 리소스에 대한 CRUD처리를 할 수 있다.

-  가장 큰 단점은 정해진 표준이 없고 암묵적인 표준만 정해져있는 것이다.

  • 하이픈(-)은 사용하지만 언더바(_)는 사용하지 않는다.
  • 특별한 경우를 제외하고 대문자 사용은 하지 않는다. 대소문자 구분을 하기 때문이다.
  • URI 마지막에 슬래시(/)를 사용하지 않는다.
  • 슬래시(/)로 계층관계를 나타낸다.
  • 확장자가 포함된 파일 이름을 직접 포함시키지 않는다.
  • URI는 명사를 사용한다.

 

2. REST 구성

잘 표현된 HTTP URI로 리소스를 정의하고 HTTP Method로 리소스에 대한 행위를 정의한다. 리소스는 JSON, XML과 같은 여러가지 언어로 표현할 수 있다.

1.  자원(Resource) - URI

2.  행위(Verb) - HTTP Method

3.  표현(Representations)

 

3. 기존 Service와의 차이점

  기존 Service REST API
view 요청에 대한 처리를 한 후 가공된 데이터를 이용해 특정 플랫폼에 적합한 형태의 view로 만들어서 반환 data처리만 하거나, 처리 후 반환 될 data가 있다면 json이나 xml형식으로 반환. view에 대해 신경쓸 필요가 없음
Create POST POST
Read GET GET
Update POST PUT
Delete GET DELETE

 

4. REST 관련 Annotation

@RestController Controller가 REST방식을 처리하기 위한 것임을 명시
@ResponseBody JSP같은 view로 전달되는 것이 아니라 데이터 자체를 전달
@PathVariable URI경로에 있는 값을 파라미터로 추출
@CrossOrigin Ajax 크로스 도메인 문제를 해결. 기본적으로 모든 도메인, 모든 요청방식에 대해 허용하게 됨. 이 어노테이션을 붙이지 않으면 동일한 출처의 Origin만 리소스를 공유할 수 있다.
@RequestBody JSON 데이터를 원하는 타입으로 바인딩해서 수신

 

5. 실제 코드

[이 글]에 정리했다.

댓글