2015-12-08 230 views
0

我有一個ProductController的控制器。我有4種標準方法勢必相應的HTTP methodslikeRest API或Semi Rest API

public function index() // GET 
public function create() // POST 
public function update() // PUT 
public function destroy() //DELETE 

到目前爲止好,但我必須做出一些其他的功能,如getProductsByCategory,getProductsAttributes()等等等等,實現在此之後,我的API仍然被稱爲REST ?如果不是我該如何處理這些要求

感謝

+1

你所描述的問題無關,與您的服務是否RESTful。 – csmckelvey

回答

2

資源的URI getProductsByCategory(...):

GET /products?category=books HTTP/1.1 
Host: service.org 

資源的URI getProductsAttributes():

GET /products/bmw-528i/attributes HTTP/1.1 
Host: service.org 

如何你實現這些請求URI的處理是一個實現細節。如果你使用的是框架,你可以這樣做:

但它是一個細節,不能影響你的服務的RESTfullness。

1

首先,REST不是一個嚴格的標準。您發佈的方法符合REST約定,但REST服務必須具有其他幾個屬性。這兩個最重要的是:

  • 無國籍:無會話,沒有餅乾,授權在每個請求的基礎
  • GET requeste永遠不會改變的任何資源

還有其他的,隨意編輯或添加評論。

我看到這樣的資源上操作來實施的大部分時間的方法是:

/<resource-name>/<product-id>/<operation>

例如:

GET /product/<product-id> 
GET /product/<product-id>/related 
POST /product/<product-id>/purchase 
GET /categories/tools 
+0

你會如何描述'getProductByCateogry'? –

+1

getProductByCategory或getProduct ** s ByCategory?我將後者作爲'GET/category/tools/products'來實現 – marstato