web-dev-qa-db-ja.com

Services 3.xとJSONを使用してコメントとノードを作成する

サービスでPOST to /comment.jsonを認識できません。ノードの作成にも同様の問題があります。

以下は、私が受け取るエラーです:HTTP/1.1 406 Not Acceptable:Missing required argument comment

このメッセージは、ファイル/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);
  }

基本的に、「コメント」引数が欠落していると思われます(オプションではありません)。

これは、私が与えたJSONのビットの1つです(ノード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ヘッダーは問題ないようで、ユーザー/ログインは正常に機能しました。

10
elaydin

次のJSONは、コメントを投稿するために最低限必要なものです。

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

ユーザーがいないため、この「example.com/node/1」へのコメントをオンにする必要があり、匿名ユーザーがコメントを投稿するための権限を設定する必要があります。

5
bendiy

このjson文字列を投稿するURLを教えてください。サービス3を使用してノードにコメントを作成する方法のドキュメントをウェブ全体で探してきました。このモジュールのドキュメントは完全に欠けています。私は投稿を試みました:

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

example.com/api/comment.json

example.com/api/comment/create.json

何も動作しないようです。 「404 Not Found:コントローラが見つかりませんでした」というメッセージが常に表示される

編集:これを投稿するとすぐに機能します。それが他の誰かを助けるなら、あなたはあなたのjson文字列を以下に投稿します:

example.com/api/comment.json

ポスターを使用してテストしている場合は、コンテンツタイプを必ずapplication/jsonに設定してください。 jqueryを使用するときは、必ずdataType: 'json'を設定してください。

2
Gregg

私は認証なしでノード/コメントを作成しようとしていたことがわかりました、そしてサイトは匿名ユーザーがノード/コメントを作成することを許可していませんでした。セッション認証をオンにし、適切にログインすると、問題なく動作しました。

2
elaydin

以下は、ノードとコメントを次の形式で作成および更新する例です。

  • HTTPメソッド
  • ContentType
  • URLパス
  • 送信するデータ

ノード作成

  • [〜#〜]投稿[〜#〜]
  • ContentType:application/json
  • ?q = endpoint/node.json

    {"type": "article"、 "title": "t8yZUfX2it"、 "language": "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"}

2

Firefoxプラグインポスターでテストしただけでも、同様の問題が発生していました。それを行っているのは、非常に単純に余分な空白と他のいくつかの単純なフォーマット(エスケープなど)であったことがわかります。ここに私が必要とするもののために私の自身のテストで機能するもののリストがあります:

CREATE USER WORKS =エンドポイント/ユーザー

{"name":"myusername","pass":"12345678","mail":"[email protected]","status":"1"}

ログイン機能=エンドポイント/ユーザー/ログイン

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

CREATE FILE WORKS =エンドポイント/ファイル

{"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"}
1
7wonders