SOAP (Simple Object Access Protocol)
- HTTP/HTTPS/SMTP 등의 프로토콜을 활용하여 메세지(XML 등)를 컴퓨터 네트워크 상에서 주고받는 프로토콜
- 다른 언어로 다른 플랫폼에서 빌드된 애플리케이션이 통신할 수 있도록 설계된 최초의 표준 프로토콜
- 프로토콜이기 때문에 복잡성과 오버헤드를 증가시키는 빌트인 룰을 적용하므로 페이지 로드 시간이 길어질 수 있다
- 해당 표준은 빌트인 컴플라이언스를 제공한다.
- 보안에 뛰어나며 DB 트랜잭션의 기본속성인 ACID를 지켜준다.
- SOAP 구조
- SOAP-ENV: Envelope
- SOAP-ENV: Header
- SOAP-ENV: Body
REST(REpresentational State Transfer)
- REST
- Resource의 Representation에 의한 상태 전달
- HTTP Method를 통해 Resource를 처리하기 위한 아키텍처
- RESTful
- REST API를 제공하는 웹서비스
- 구조
- REST
- HTTP
- HTTP Method // HTTP Status Codes
- HTTP Method
HTTP Method | 전송 형태 | 설명 |
---|---|---|
GET | GET [request-uri]?query_string HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n | GET 요청 방식은 URI(URL)가 가진 정보를 검색하기 위해 서버 측에 요청하는형태이다 |
POST | POST [request-uri]?query_string HTTP/1.1\r\n HOST:[Hostname] 혹은 [IP] \r\n Content-Lenght:[Lenght in Bytes] \r\n \r\n [query-string] 혹은 [데이터] | POST 요청 방식은 요청 URI(URL)에 폼 입력을 처리하기 위해 구성한 서버 측 스크립트(ASP, PHP, JSP 등) 혹은 CGI 프로그램으로 구성되고 Form Action과 함께 전송되는데, 이때 헤더 정보에 포함되지 않고 데이터 부분에 요청 정보가 들어가게 된다. |
HEAD | HEAD [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n | HEAD 요청 방식은 GET과 유사한 방식이나 웹 서버에서 헤더 정보 이외에는 어떤 데이터도 보내지 않는다. 웹 서버의 다운 여부 점검(Health Check)이나 웹 서버 정보(버전 등)등을 얻기 위해 사용될 수 있다. |
OPTIONS | OPTIONS [request-ri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n | 해당 메소드를 통해 시스템에서 지원되는 메소드 종류를 확인할 수 있다. |
PUT | PUT [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n Content-Lenght:[Length in Bytes] \r\n Content-Type:[Content Type] \r\n \r\n [데이터] | POST와 유사한 전송 구조를 가지기 때문에 헤더 이외에 메시지(데이터)가 함께 전송된다. 원격지 서버에 지정한 콘텐츠를 저장하기 위해 사용되며 홈페이지 변조에 많이 악용되고 있다. |
DELETE | DELETE [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n \r\n | 원격지 웹 서버에 파일을 삭제하기 위해 사용되며 PUT과는 반대 개념의 메소드이다. |
TRACE | TRACE [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n \r\n | 원격지 서버에 Loopback(루프백) 메시지를 호출하기 위해 사용된다. |
CONNECT | CONNECT [request-uri] HTTP/1.1\r\n Host:[Hostname] 혹은 [IP] \r\n \r\n | 웹 서버에 프락시 기능을 요청할 때 사용된다. |
- post, put과 patch 차이
- post 는 insert에 역할을 한다.
- post와 put의 차이를 알기 위해서 멱등성을 알아야 한다.
- 멱등성이랑 여러번 수행해도 같은 결과를 반환하는 것을 의미한다.
HTTP Method CRUD Idempotence GET Read Yes POST Create No PUT Update Yes DELETE Delete YES - POST는 요청할 때마다 새로운 결과를 반환한다. 즉, 요청할 때마다 key는 다르고, 그 외 같은 데이터로 create 되어 반환되는 것
- 그에 비해 PUT은 요청할 때마다 같은 결과를 반환한다. 즉, 해당 key값에 데이터가 동일하게 수정되어 반환되는 것
- put, patch 모두 update에 사용된다.
- PATCH, which is used to apply partial modifications to a resource
- 객체에 수정하고자 하는 값만 넘겨주면 된다.
- PUT method requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload
- 해당 객체에 대한 모든 값이 포함되어야 한다. 없는 경우 null처리 된다.
// put 예제 요청 put /accounts/10 { age: 10 } // put 결과 { name: null, age: 10 } // patch 예제 요청 patch /accounts/1 { age: 10 } // patch 결과 { name: 둘리, age: 10 }
** 출처: https://devuna.tistory.com/77 튜나 개발일기
- post 는 insert에 역할을 한다.
- Resource
- URI(Uniform Resource Identifier), 인터넷 자원을 나타내는 유일한 주소
- XML, HTML, JSON 등이 사용
- Richardson Maturity Model
- A way grade your API according to the constraints of REST.
- Level 0: The swarmp of POX
- Expose soap web services in rest style
- ex) http://domain/getAccount
- Level 1: Resources
- Expose resources with proper uri
- ex) http://server/accounts/10
- Level 2: HTTP Verbs
- Level 1 + Http Method
- Level 3: Hypermedia Controls
- Level 2 + HATEOAS -> Data + Next possible actions by link
- RESTful API 설계시 고려사항
- HTTP Method의 장점을 살려라
- Get: Select, Post: Insert, Put: Update, Delete: Delete
- Response Status
- 200: ok, 201: created , ..etc
- 400: Bad Request, 401: Unauthorized(권한), 404: Not found , ..etc
- URI
- 보안에 위배되는 내용을 첨부해서는 안된다.
- 데이터 타입은 복수형태로 명사를 사용하자 (account(X) -> accounts(O))
- Endpoint를 일정하게 유지하며 HTTP Method에 따른 기능 설계를
- HTTP Method의 장점을 살려라
SOAP와 REST 차이
- Stateless
- SOAP는 기본적으로 stateless하다. 하지만 SOAP는 Session등을 이용하여 stateful을 지원할 수 있다.
- REST는 stateless를 강조한다. 상태의 관리는 전적으로 client에게 위임한다.
- stateless와 stateful
- stateful: Server와 Client간 세션의 State에 기반하여 Client에 response를 보낸다. 세션에 상태를 포함한 client와의 세션 정보를 서버에 저장하게 된다. (예: TCP)
- stateless: server는 단순히 요청에 대한 처리만 하며 세션 관리는 client에게 있다. 즉, 서버가 client와의 세션 정보를 저장하지 않는다.(예: UDP, HTTP)
- HTTP Method
- SOAP는 주로 POST 를 사용하여 CRUD를 처리하며, GET을 사용하는 경우도 있다.
- REST는 주로 HTTP 프로토콜의 GET, POST, DELETE, PATCH 등의 메서드를 사용한다.
- caching
- SOAP는 기본적으로 body의 해석이 필요하다. 따라서 body를 분석하여 cache의 유무를 선택적으로 적용하기 때문에 cache 구현이 상대적으로 어렵다.
- REST는 URI, query의 정보로 데이터를 가져오며 그렇기 때문에 쉽게 cache의 사용을 쉽게 HTTP level에서 정의할 수 있다.
- security
- SOAP는 표준화 되어진 기준을 제공하고 있다.
- REST는 일반적으로 client side에 정보를 맡기기 때문에 상대적으로 취약하다.