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


10

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

以下は、私が受け取るエラーです: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ヘッダーは問題ないようで、ユーザー/ログインは正常に機能しました。

回答:


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 Not Found:コントローラが見つかりませんでした」というメッセージが常に表示される

編集:私がこれを投稿するとすぐに、私はそれを動作させました。それが他の誰かを助ける場合、あなたはあなたのjson文字列を以下に投稿します:

example.com/api/comment.json

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


2

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

  • 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"}


1
これはうまくいきます。受け入れられる答えになるはずです!Chrome postmanからテストする場合は、ヘッダーにkey: "Content-Type" value: "application / json"を追加することを忘れないでください。これは別の非常に貴重なリソースです:https
longboardnode

1

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

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

{"name":"myusername","pass":"12345678","mail":"myemail@example.com","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"}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.