我应该使用PUT、PATCH或POST和WP::EDITABLE编辑用户元字段

时间:2017-12-05 作者:Armstrongest

我有一个简单的CPT 调用App 在后端。

我添加了一个自定义usermeta 已调用字段favorite_appsUsers

在前端,我显示一个应用程序列表,然后用户按一个星(☆) 图标将其添加到收藏夹列表中(存储为post_idfavorite_apps 自定义用户元字段)。

我决定使用REST API进行此操作,并构建了一个自定义端点:

/wp-json/my-site/v1/users/{user_id}/favoriteapps

示例:/wp-json/my-site/v1/users/555/favoriteapps

此路线接受POST,PUT,PATCH 使用WP::EditableGET 使用WP::Readable.

A.GET 请求返回用户列表555\'s电流favorite_apps

A.POST 请求并通过app=123 在正文中,我添加了应用程序ID123app_favorites

我不确定是否要从列表中删除应用程序。我没有删除favorite\\u应用程序列表,我正在删除其中一个项目。

使用起来感觉很自然POSTDELETE 从列表中添加/删除,但:

是否有convention 修改项目列表时可以遵循的操作PUT 或PATCH 并通过action 作为另一个参数browser support 对于某些方法作为参考,我是这样添加应用程序的123 收件人/发件人用户555 在js/jQuery中:

var uid = 555;
var appId = 123;
$.ajax({
    method : \'POST\',
    data   : { app : 123 },
    url    : \'/wp-json/my-site/v1/users/\' + uid + \'/favoriteapps\',
        success: function( data ){
            // code to tell user of success or failure;
        }
});

1 个回复
最合适的回答,由SO网友:Armstrongest 整理而成

好的,下面是一些很好的例子:https://restfulapi.net/resource-naming/http://www.restapitutorial.com/lessons/restfulresourcenaming.html 我要回答我自己的问题。

ESSENTIALLY, 对于我的用例,我不会使用PUT 但依赖于POSTDELETE 到集合终结点和单例终结点。

注:我省略了wp-json/my-site-namespace/v1 为清晰起见,我在POST请求中使用了查询字符串,但为了清晰起见,我会在POST正文中将其作为POST变量提交,而不是在查询字符串中提交

使用GET 对单个实体或集合的请求

// Gets a collection of users
GET /users 

// Gets the singleton users 3
GET /users/3/favoriteapps

// Gets a collection of user 3 favorite apps
GET /users/3/favoriteapps

使用POST 仅在集合终结点上请求(有意义)

// Create a new user named Joe ( returns the ID )
POST /users?name=Joe ( pass in required params in POST vars )

// Add app 123 to user\'s favorite apps. Technically, I\'m not CREATING
// a new favorite app, which is where I was getting hung up, but 
// in context of user 3, I AM creating a new reference to an existing app

POST /users/3/favoriteapps?app_id=123  ( pass in required app id in POST vars )

使用PUT 请求编辑集合或实体在我的情况下,我正在向用户添加和从用户中删除已知应用,因此我不支持PUT 在我的实现中,但如果我确实实现了它,我将只在集合上实现它,如果我传递一个集合并将该集合与现有集合进行比较,可能会这样。

// Edit ( replace ) existing apps with list of apps for user 3
PUT /users/3/favoriteapps?apps=123,321,444,111,33

// In my use case, I wouldn\'t ONLY support PUT to a new favoriteapps
// base url, outside of the user context This would but this would 
// change the app title for app 123 ( obviously for all users\' collections )
PUT /favoriteapps/123?title=New+App+Title

使用DELETE 在单个实体端点上的请求(大部分)**

**在集合端点上使用DELETE应该删除整个集合(从语义上讲),这很少是您想要的。但在某些情况下,如使用清除按钮将集合重置为0项,您可以使用它。

// Remove app `123` from favoriteapps collection of user 3
DELETE /users/3/favoriteapps/123

// note: this is another area I got hung up, as I\'m not DELETING app 123
// However, in context of user 3, I AM removing it from that user\'s collection

结束

相关推荐

插件中的Singleton在AJAX调用中失败(插件再次初始化)

我正在使用Wordboot starters plugin 创建我自己的插件。此插件使用PHPsingleton 方法来防止多个插件初始化。现在,当访问者发送联系表时Javascript XHR AJAX 执行调用以处理联系请求。一切正常,但我注意到singleton没有正常工作,因为对于每个AJAX请求,插件都在执行__construct 主要的Wordboot 班这意味着每次执行这样的请求时,整个插件都会再次初始化!我用了Wordpress REST API 和往常一样wp_ajax 用于执行AJAX