REST API

mingggkeee·2022년 4월 25일
0

Open API(Application Programming Interface)

  • Open API는 프로그래밍에서 사용할 수 있는 개방되어 있는 상태의 Interface
  • 네이버, 카카오 등 포털 서비스 사이트나 통계청, 기상청 같은 관공서, 공공데이터 포털이 가지고 있는 데이터를 외부 응용 프로그램에서 사용할 수 있도록 Open API를 제공하고 있다.
  • Open API와 함께 거론되는 기술이 REST이며, 대부분 Open API는 REST방식을 지원한다.

REST(Representational State Transfer)

  • 2000년도 로이 필딩의 박사학위 논문에 최초로 소개되었다.
  • REST는 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정한다.
  • web의 장점을 최대한 활용할 수 있는 아키텍처(설게구조)이다.
  • HTTP URI를 통해 제어할 자원(Resource)를 명시하고, HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원을 제어하는 명령을 내리는 방식의 아키텍처이다.

특히 서버에 접근하는 클라이언트 종류가 브라우저가 아닌 스마트폰, 다른 서비스 등으로 다양해지면서 화면에 대한 관심은 없고 데이터, 비지니스 로직에만 관심있는 경우가 많은데 이때 사용되는 것이 REST이다.
REST방식으로 서비스를 제공하는 것을 Restful 하다라고 한다.

REST 구성

  • 자원(Resource) : URI
  • 행위(Verb) : HTTP Method
  • 표현(Represntations)

잘 표현된 HTTP URI로 리소스를 정의하고, HTTP method로 리소스에 대한 행위를 정의한다.
리소스는 JSON, XML과 같은 여러 형태의 언어로 표현 가능하다.

기존의 Service와 REST Service의 비교

  • 기존 Service : 요청에 대한 처리를 한 후 가공된 data를 이용하여 특정 플랫폼에 적합한 형태의 View로 만들어서 변환
  • REST Service : data처리만 하거나, 처리 후 반환될 data가 있다면 JSON이나 XML형식으로 전달. View에 대해서는 신경 쓸 필요가 없다.

REST

  • 기존의 전송방식과는 달리 서버는 요청으로 받은 리소스에 대해 순수한 데이터를 전송
  • 기존의 GET/POST 외에 PUT,DELETE방식을 사용하여 리소스에 대한 CRUD처리가 가능
  • 가장 큰 단점은 딱 정해진 표준이 없다는 점이다. 암묵적인 표준이 정해져있다.
    • 하이픈(-)은 사용 가능하지만 언더바(_)는 사용하지 않음
    • 특별한 경우를 제외하고 대문자 사용은 하지않음
    • URI 마지막에 슬래시(/) 사용하지 않음
    • 슬래시(/)로 계층 관계를 나타냄
    • 확장자가 포함된 파일 이름을 직접 포함시키지 않음
    • URI는 명사만을 사용
  • 기존의 블로그 등들은 GET과 POST만으로 자원에 대한 CRUD를 처리하며, URI는 액션을 나타냈다.
  • REST로 변경할 경우 4가지 method를 모두 사용하여 CRUD처리가 가능해지며, URI는 제어하려는 자원을 나타내게된다.

Jackson library

  • jackson-databind 라이브러리는 객체를 JSON 포맷의 문자열로 변환시켜서 브라우저로 전송해준다.
  • jackson-dataformat-xml 라이브러리는 객체를 xml로 브라우저로 전송해준다.
  • pom.xml에 라이브러리를 추가해서 사용가능

REST 관련 Annotation

  • @RestController : 컨트롤러가 REST 방식을 처리하기 위한 것임을 명시
  • @ResponseBody : JSP 같은 뷰로 전달되는 것이 아니라 데이터 자체를 전달
  • @PathVariable : URL 경로에 있는 값을 파라미터로 추출
  • @CrossOrigin : Ajax의 크로스 도메인 문제를 해결(CORS문제)
  • @RequestBody : JSON 데이터를 원하는 타입으로 바인딩
profile
만반잘부

0개의 댓글