2017-05-25 85 views
0

我目前正在開發一個需要WordPress網站和簡單的REST api的項目。我發現WordPress擁有自己的REST API,並決定擴展其功能以滿足我的需求。我所需要做的就是擁有GET和POST請求的端點,這些端點將數據從與/不與WordPress直接相關的表中檢索/插入到數據庫中(但在同一數據庫中)。我成功實現了所有的GET請求,但是,我正在努力讓POST的工作。
我有限定的本路由寄存器:POST方法的Wordpress REST API自定義端點

register_rest_route('api/v1', 'create-player/', array(
     'methods' => 'POST', 
     'callback' => 'create_player', 
)); 

客戶端發送通過其預計將達到從上述路線端點AJAX調用的請求。這是AJAX:

$.ajax({ 
     method: "POST", 
     url: '/wp-json/api/v1/create-player/', 
     data : JSON.stringify(data), 
     contentType: 'applcation/json', 
     beforeSend: function (xhr){ 
      xhr.setRequestHeader("X-WP-None", locData.nonce); 
      console.log('beforeSend'); 
     }, 
     success: function(response){ 
      console.log("success" + response); 
     }, 
     fail: function (response){ 
      console.log("fail" + response); 
     } 
    }); 

我不知道如何從REST API打造的POST路徑登記,其他的GET請求有一個屬性args直接映射到端點傳遞的參數。在使用POST時,我是否需要類似的東西來處理請求數據?如何獲取從ajax傳遞的數據類型,然後在我的函數中使用它create_player(); WP REST API文檔似乎不完整,我發現的所有信息都使用端點來實現內置WordPress功能,例如posts/authors/blogs等等,但我不需要,我只是想使用提供的功能和創建我自己的接口。謝謝。

+0

僅供參考,有關於API沒有REST。 – Evert

+0

@Evert好的,據我所知,POST和GET方法不在同一個端點下(在這種情況下,對於/ player),並且「更加平靜」的api正是我想要實現的。在上面的示例中,我將POST方法與其他端點分開,以使我的問題更清晰。儘管我無法理解WP REST API POST請求是如何工作的,但我在發送POST請求時通過將JSON傳遞給url實現了一個愚蠢的解決方法,這樣我就可以獲取實際數據並對其進行處理。但我仍然很想了解如何正確處理這種情況... – bassment

+0

我不能用wordpress幫你,但如果你有興趣開發更好的REST API,我建議你閱讀這個:https:// martinfowler.com/articles/richardsonMaturityModel.html如果你不是'3級',你在技術上不是REST。 – Evert

回答

3

終於找到了!要訪問POST請求的正文,請使用register_rest_route回調方法中的$request->get_body();