RESTful 서비스의 비 CRUD 작업
비 CRUD 작업을 RESTful 서비스에 추가하는 "RESTful"방법은 무엇입니까? 다음과 같은 레코드에 대한 CRUD 액세스를 허용하는 서비스가 안심 가정합니다.
GET /api/car/123 <- Returns information for the Car object with ID 123
POST /api/car <- Creates a new car (with properties in the request)
PUT /api/car/123 <- Updates car 123 (with properties in the request)
DELETE /api/car/123 <- Deletes car 123
POST /api/car/123/wheel/ <- Creates a wheel and associates it to car 123
자동차의 색상을 변경하려는 경우 POST /api/car/123
새 색상에 대한 POST 변수를 포함합니다.
그러나 내가 자동차를 구매하고 싶다고 가정 해봅시다. 그 작업은 "사용자"레코드의 "소유 한 자동차"속성을 업데이트하는 것보다 복잡합니다. POST /api/car/123/purchase
"purchase"가 기본으로 메소드 이름 인, 과 같이 포함하는 것이 RESTful 입니까? 아니면 PURCHASE
대신에 사용자 지정 HTTP 동사를 POST
만나?
아니면 CRUD가 아닌 작업이 완전히 REST 범위를 벗어 납니까?
구매 를 RESTful 사전 의 비즈니스 또는 리소스 로 생각하십시오 . 즉, 구매는 실제로 새로운 리소스를 생성하는 것입니다. 그래서 :
POST /api/purchase
새로운 주문을합니다. 세부 정보 (사용자, 자동차 등)는이 주소로 전송 된 콘텐츠 내에서 ID (또는 URI)로 참조되어야합니다.
자동차를 주문하는 것이 데이터베이스의 단순한 INSERT가 아니라 중요하지 않습니다. 실제로 REST는 데이터베이스 테이블을 CRUD 작업으로 노출하는 것이 아닙니다. 위치에서 관점에서 주문 (구매)을 생성하지만 서버 측은 원하는만큼 많은 처리 단계를 자유롭게 수행 할 수 있습니다.
HTTP 프로토콜을 더욱 남용 할 수도 있습니다. Location
헤더를 사용 하여 새로 생성 된 주문에 대한 링크를 반환하고 HTTP 응답 코드를 신중하게 선택하여 문제 (서버 또는 클라이언트 측)에 대해 사용자에게 알립니다.
내가 이해하는 RESTful 방법은 새로운 HTTP해야하는 동사가 필요하지 않고 수행 할 작업을 의미하는 명사가 어딘가에있는 것입니다.
차를 구입 하시겠습니까? 글쎄요
POST /api/order
당신이 결정하고있는 것은 주문을 만드는 것입니다. 따라서 주문 및 게시를위한 다른 리소스를 추가하고 주문 프로세스 중에 배치합니다.
메서드 호출 리소스에서 생각하십시오.
주문을 완료 한 후 POST / api / 주문 // 완료 또는 이와 같은 것입니다.
REST API가 의미론을 제공하는 것보다 훨씬 많은 방법으로 도움이된다고 생각합니다. 따라서 RPC 작업 스타일에서 더 의미가있는 일부 호출 때문에 RPC 스타일을 선택할 수 없습니다. 예는 두 장소 사이의 길 찾기를위한 Google지도 API입니다. 다음과 같이 표시됩니다. http://maps.googleapis.com/maps/api/directions/json?origin=Jakkur&destination=Hebbal
그것을 그것을 "findDirections"(동사)라고 부르고 그것을 연산으로 취급 할 수 있습니다. 대신에 "방향"(명사)을 리소스로 생성 길 찾기 리소스에 대한 쿼리로 길 찾기를 처리했습니다 (내부적으로 방향이라는 실제 리소스가 없을 수 있고 많은 매개 변수를 기반으로 길 찾기를 찾기 위해 비즈니스 될 수 있음).
참고 URL : https://stackoverflow.com/questions/6850187/non-crud-operations-in-a-restful-service
'IT' 카테고리의 다른 글
스트리밍 리소스가 RESTful 패러다임에 어떻게 처리합니까? (0) | 2020.08.22 |
---|---|
이클립스에서 당신의 치료를 받으시나요? (0) | 2020.08.22 |
http 페이지에서 https를 사용하는 Ajax (0) | 2020.08.22 |
정규식을 사용하여 일치하는 대신에 생성 (0) | 2020.08.22 |
OAuth 토큰 생성에 대한 모범 사례? (0) | 2020.08.22 |