REST [api] 구조를 OO 모델과 비교할 때 다음과 같은 유사점이 있습니다.
양자 모두:
데이터 지향
- REST = 자원
- OO = 객체
데이터 주변의 서라운드 작동
- REST = 자원 주변의 동사 (Get, Post, ...)
- OO = 캡슐화를 통한 객체 주변의 작업 촉진
그러나 OO 사례는 우수 패턴을 적용하려고 할 때 항상 REST API에 의존하지는 않습니다. REST에서는 모든 요청을 처리 할 컨트롤러가 하나도 없으며 내부 객체 복잡성을 숨기지 않습니다.
반대로 REST는 자원과 다른 두 가지 이상의 모든 관계에 대한 자원 공개를 촉진합니다.
리소스 계층 관계를 통해 (ID 43의 연락처는 주소 453으로 구성됨)
/api/contacts/43/addresses/453
REST json 응답의 링크를 통해 :
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
OO로 되돌아오고, 외관 디자인 패턴이 존중 Low Coupling
사이 objectA 및 ' objectB 클라이언트 '및 High Cohesion
이를위한 objectA 및 내부 객체 조성물 ( objectC , objectD ). 으로 objectA의 인터페이스,이 한계에 영향을 현상 허용 objectB 의 objectA (내부 변화 objectC 및 objectD을 만큼 같이) objectA에 여전히 존중 API (동작).
REST에서는 데이터 (자원), 관계 (링크) 및 동작 (동사)이 다른 요소로 분해되어 웹에서 사용할 수 있습니다.
REST를 사용하면 클라이언트와 서버 간의 코드 변경에 항상 영향을 미칩니다 . 요청과 리소스 High Coupling
사이에 있기 때문 입니다.Backbone.js
Low Cohesion
REST 링크로 촉진 된 Backbone.js javascript application
" REST 리소스 및 기능 " 검색을 처리 하는 방법을 찾지 못했습니다 . WWW는 다중 서버에 의해 제공되며 OO 요소는 여러 호스트에서 서비스를 받기 위해 폭발해야했지만 주소와의 접촉을 보여주는 페이지를 "저장"하는 것과 같은 간단한 시나리오에서는 나는 결국 :
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
브라우저 응용 프로그램에 대한 저장 작업 원자 트랜잭션 책임을 이동시킵니다 (두 개의 리소스를 별도로 처리 할 수 있기 때문에).
이를 염두에두고 개발을 단순화 할 수없는 경우 (파사드 디자인 패턴은 해당되지 않음) 고객에게 더 많은 복잡성을 가져 오는 경우 (트랜잭션 원자 저장 처리) RESTful의 이점은 어디에 있습니까?
PUT /api/contacts/43
캐스케이드를 내부 객체의 업데이트로 만드는 데 어떤 문제가 있습니까? 나는 이와 같이 설계된 많은 API를 가지고 있었다 (마스터 URL은 "전체"를 읽고 / 만들고 / 업데이트하고 하위 URL은 조각을 업데이트한다). 변경이 필요하지 않은 경우 (성능상의 이유로) 주소를 업데이트하지 마십시오.