2015-12-31 92 views
4

我需要幫助實現使用POST方法的自定義REST API在Drupal 8Drupal的8 REST資源POST方法

我有一個REST資源插件類,並在它的get()方法。 我可以通過GET方法訪問這個資源,並且工作正常。

雖然在通過「REST UI」模塊查看時顯示「POST」,但我在同一個類中有post()方法,但無法通過POST方法訪問資源。

REST UI Settings page

但通過POST方法訪問它時所顯示下面的錯誤。

{"message":"No route found for \u0022POST \/iot\/location\/\u0022: Method Not Allowed (Allow: GET)"} 

我使用郵差Chrome擴展程序和截圖低於 Testing REST API

我用下面的博客寫的REST API和我的代碼是在這個博客帖子中顯示的代碼幾乎相同

http://enzolutions.com/articles/2014/12/16/how-to-create-a-rest-resource-in-drupal-8/

在此先感謝。

+1

我也在努力創建自定義POST端點。不幸的是,似乎沒有關於創建自定義POST端點的代碼或教程,所有內容都集中在現有的Core實體/ {entity_type}/{entity}上。我認爲問題在於不瞭解@RestResource批註中的'serialization_class'和'deriver'鍵。我希望在確定它之後,我可以在這裏提供答案...... –

+0

您是否清除了緩存?謝謝。 – TheodorosPloumis

+0

你是否遵循https://www.drupal.org/docs/8/api/restful-web-services-api/restful-web-services-api-overview上的文檔?另外,你使用的是什麼版本的Drupal 8.x(8.1.x,8.2.x)?也許這是rest_ui模塊的一個bug。你有沒有試圖創建自己創建的YML文件沒有rest_ui的幫助? – TheodorosPloumis

回答

0

確保您已在您的REST資源中設置了uri_paths,其中包括「https://www.drupal.org/link-relations/create」。

例如,您可能有這樣的事情:

/** 
* My REST Resource 
* 
* @RestResource(
* id = "my_rest_resource", 
* label = @Translation("My REST Resource"), 
* uri_paths = { 
*  "canonical" = "/my_rest/resource" 
* } 
*) 
*/ 

張貼到上述資源你可以使用端點/my_rest_resource。如果你想發佈到/my_rest/resource代替然後添加鏈接關係條目:

/** 
* My REST Resource 
* 
* @RestResource(
* id = "my_rest_resource", 
* label = @Translation("My REST Resource"), 
* uri_paths = { 
*  "canonical" = "/my_rest/resource", 
*  "https://www.drupal.org/link-relations/create" = "/my_rest/resource" 
* } 
*) 
*/ 

您可能需要添加https://www.drupal.org/link-relations/create後清除緩存。我發現GET可以像第一個例子一樣按預期工作,而POST失敗並且出現錯誤「405方法不允許」。

在Drupal的文檔(https://www.drupal.org/docs/8/api/restful-web-services-api/restful-web-services-api-overview)中關於此主題的措詞可能會更清楚一點。