티스토리 뷰

IT/IT기술

RESTful한 Open API 개발

#*! 2017. 3. 3. 13:03

Open API 개발을 위해 용어와 특징들을 정리하였습니다.



SOAP(Simple Object Access Protocol)


- HTTP, HTTPS, SMTP 등을 사용하여 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 형태의 프로토콜이다.



What is REST?

- REST stands for “Representational State Transfer”

- Data and Service are represented by unique URI : unique한 URI를 통해 Data와 Service를 표현



REST 특징

▶ Addressable Resources

- Every “thing” should have a URI

▶ Statelessness

- scalability and decoupling

▶ Representation Oriented

- Different applications need different formats

▶ Uniform interface

- Use the standard methods of the protocol


모든 것은 URI를 가지고 있다. 예를 들면 “User”, “article” 책의 “ISBN”, 운전면허증의 “라이선스 번호”등은 모두 Resource 라고 한다. 이 리소스에 클라이언트가 바로 액세스할 수 있게 주소를 가리키는 URI를 가지고 있어야 한다.

(상태비보존성)웹 어플리케이션이 클라이언트의 상태에 대한 정보를 보관하지 않는다. 모든 HTTP 요청이 완전히 독립적으로 발생한다. 어떤 요청을 했을 때 다른 페이지에 의존적이지 않고, searchForm을 입력해서 “buri” 를 찾는게 아닌 /user/buri를 URI로 입력하여 접근 가능하도록 한다. 이렇게 되면 사용자는 URI만 보고 예측하여 계층적인 접근을 가능하므로 직관적이다.

서버는 클라이언트 time out에 대해 신경쓸 필요도 없고 클라이언트가 애플리케이션의 “어디”에 있었는지 기억한 정보를 잃어버릴 일도 없다. 클라이언트는 매 요청마다 필요한 모든 정보를 준다. REST에서는 상태가 서버가 아니라 클라이언트에 유지되며 매 요청마다 필요한 정보를 서버에 보낸다. 

모든 Resource는 일반적인 인터페이스(HTTP GET, POST, PUT, DELETE)



RESTful

용도 : RESTful한 Open API 개발 프레임워크

http://jersey.java.net/

기존에 API를 위해 사용했던 방식

- SOAP기반의 웹서비스로 처리

- 단순히 webwork와 같은 프레임워크를 사용하여 Xstream과 같은 라이브러리로 xml이나 json으로 데이터를 변환해서 처리



What is JAX-RS

JAX-RS(Java™ API for RESTful Web Services)는 자바 플랫폼에서 경량화된 REST 방식의 웹 애플리케이션 구현을 지원하는 자바 API이다.



Jersey

- RESTful 웹 서비스용 자바 API의 오픈 소스 구현체

- JSON/XML/HTML mime type으로 결과를 REST를 통해 전달

▶ jax-rs tutorial

- http://www.myeclipseide.com/documentation/quickstarts/webservices_rest/

▶ Apache CXF

- http://cxf.apache.org/docs/a-simple-jax-ws-service.html



Jersey TEST

▶ Jersey 라이브러리로 REST서버를 만들어보자!

- http://androidhuman.tistory.com/475

▶ Jersey와 Spring으로 RESTful 웹 서비스 구축하기

- http://lyb1495.tistory.com/77

- http://www.androidside.com/plugin/mobile/board.php?bo_table=B46&wr_id=18139&sca=초크리스님+자바강좌



Servlet

- 자바를 이용해서 웹상에 실행되는 프로그램을 작성하는 기술

- 서블릿은 서버에서 실행되는 작은 프로그램이다.



JAX-RS 애노테이션 (출처 : http://m.blog.naver.com/tgmuseum/40193068202)

 - @Path :실제 요청 URL을 나타낸다. 이 애노테이션은 클래스 선언부, 메서드 선언부 모두 위치할수 있으며 클래스 선언부에 @Path("/sample"), 메서드 선언부에 @Path("/xml") 이라고 설정한다면 해당 메서드의 호출은 /api/sample/xml 이 된다. 여기서 /api는 web.xml 파일에 설정된 Jersey URL이다.

- @GET : GET방식으로 데이터 추출, 선택가능한 옵션은 @PUT, @DELETE, @POST 등이 있다.

- @Consumes : 수신 하고자하는 데이터 포맷을 정의한다. 

- @Produces : 출력하고자 하는 데이터 포맷을 정의한다. 여기서 사용하는 포맷은 "application/json", "text/xml" 이고 각각 json, xml 타입으로 데이터를 출력한다. 기타 선택가능한 옵션은 "application/atom+xml", "application/x-www-form-urlencoded", "application/octet-stream", "application/svg+xml", "application/xhtml+xml", "application/xml", "multipart/form-data", "text/html", "text/plain" 등이 있다.

- @QueryParam : URI 쿼리 파라미터의 값을 꺼내온다.

- @FormParam : Form값이 전송된 경우 Form안의 값들을 꺼내온다.

- @PathParam :  URI template에 명시되어 있는 값을 꺼내온다.  

- @CookieParam : 쿠키에 있는 값을 꺼내온다.

- @HeaderParam : 헤더에 있는 값을 꺼내온다.

- @Context : Request header나  URI 정도등등의 inject 정보를 사용할 수 있다.

- Produces와 Consumes 차이 : @Produces는 Accept 헤더를 참고하고 @Consumes은 Content-Type 헤더를 참고함



댓글