使用Services 3.x和JSON创建注释和节点


10

我无法让服务识别到/comment.json的POST。创建节点也有类似的问题。

以下是我得到的错误:HTTP / 1.1 406不可接受:缺少必需的参数注释

此消息来自文件:/services/server/rest_server/includes/RESTServer.inc具体来说,以下几行:

  elseif (!isset($info['optional']) || !$info['optional']) {
    return services_error(t('Missing required argument !arg', array(
      '!arg' => $info['name'],
    )), 406);
  }

基本上,似乎认为缺少“ comment”参数(并且它不是可选的)。

这是我提供的JSON的许多位之一(向节点8801发布注释)

{name:"test",language:"und",cid:"0",pid:"0",uid:"17593",nid:"8801",
comment:{subject:"Subject of the comment, if not entered it will be auto-generated",
comment_body:
{und:[
[{value:"value of the field comment in the comment, remember that in D7 we can create fields for comments too", format: "full_html"}]
]}}}

这是完全有效的(基于其他在线JSON检查)。它还与我在/services/test/functional/ServivesResourceCommentTests.test的服务测试示例中看到的内容匹配

但是,我总是收到相同的错误消息。这似乎类似于: Drupal 7服务json节点对象

这也没有解决。有人可以为我提供正确的JSON格式吗?真的,我要做的就是将它传递给类似的东西:

{ nid : 8081 , uid : 17593 ,comment:{comment_body:"test",subject:"test"}}

我的HTTP标头似乎还可以,并且用户/登录工作正常。

Answers:


5

以下JSON似乎是您发布评论所需的最低要求:

{
  "nid":"1",
  "subject":"Comment Subject Text",
  "comment_body":{
    "und":[{
      "value":"Comment body text"
    }]
  }
}

由于没有用户,因此需要打开对此“ example.com/node/1”的评论,并且需要设置匿名用户发表评论的权限。


2

原来,我试图在不进行身份验证的情况下创建节点/注释,并且该站点不允许匿名用户创建节点/注释。打开会话身份验证并正确登录后,一切正常。


1
所以您在Drupal服务或REST客户端中打开了会话身份验证?您能提供一些有关操作方法的快速提示吗?
ted.strauss

2

您能告诉我该json字符串发布到哪个URL。我一直在网上寻找一些文档,以了解如何使用服务3在节点上创建注释。完全缺少此模块上的文档。我尝试过发布到:

example.com/api/node/{nid}/comments.json

example.com/api/comment.json

example.com/api/comment/create.json

似乎没有任何作用。我总是收到“ 404未找到:找不到控制器”

编辑:一旦我发布了这个我就可以工作。如果对其他人有帮助,则将json字符串发布到:

example.com/api/comment.json

如果您使用Poster测试,请确保将内容类型设置为application / json。使用jquery时,请确保设置dataType:'json'。


2

以下是一些使用以下格式创建和更新节点和注释的示例:

  • HTTP方法
  • 内容类型
  • URL路径
  • 要发送的数据

节点创建

  • 开机自检
  • ContentType:application / json
  • ?q = endpoint / node.json

    {“类型”:“文章”,“标题”:“ t8yZUfX2it”,“语言”:“ und”}

节点更新

  • ContentType:application / json
  • ?q = endpoint / node / 123.json

    {“ node”:{“ nid”:“ 123”,“ title”:“ 9AjrXJhWMI”,“ language”:“ und”}}

评论创建

  • 开机自检
  • ContentType:application / json
  • ?q = endpoint / comment.json

    {“ subject”:“ liJmJfpqMX”,“ comment_body”:{“ und”:[{“ value”:“ 9DyaNZi3lA”}]},“ nid”:“ 18”}

评论更新

  • ContentType:application / x-www-form-urlencoded
  • ?q = endpoint / comment / 456.json

    {cid:456,“ subject”:“ hzU27R6daE”,“ comment_body”:{“ und”:[{“ value”:“ BqZU5DwArD”}]},“ nid”:“ 18”}


1
这很好。应该是公认的答案!要记住的一件事是,如果您是从Chrome邮递员进行测试,则在标题中添加键:“ Content-Type”值:“ application / json”。这是另一个宝贵的资源:https
//www.drupal.org/node/1447020

1

即使只是使用firefox插件海报进行测试,我也遇到了类似的问题。事实证明,这样做的原因很简单,就是多余的空格和其他一些简单的格式设置(例如转义符)。这是在我自己的测试中对我需要的东西起作用的列表:

创建用户工作=端点/用户

{"name":"myusername","pass":"12345678","mail":"myemail@example.com","status":"1"}

登录工作=端点/用户/登录

{"username":"admin","password":"admin"}

创建文件工作=端点/文件

{"uid":"1","filesize":"99999","filename":"whatever.bin","file":"BASE64_ENCODED_DATA"}

CREATE NODE WORKS =端点/节点

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.