Membuat komentar dan node dengan Layanan 3.x dan JSON

10

Saya mengalami masalah dalam mendapatkan layanan untuk mengenali POST ke /comment.json. Saya memiliki masalah yang sama dengan membuat node juga.

Berikut ini adalah kesalahan yang saya dapatkan: HTTP / 1.1 406 Tidak Dapat Diterima: Tidak ada komentar argumen yang diperlukan

Pesan ini berasal dari file: /services/server/rest_server/includes/RESTServer.inc Secara khusus, baris:

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

pada dasarnya, tampaknya berpikir bahwa argumen "komentar" tidak ada (dan itu bukan opsional).

Ini adalah salah satu dari banyak bit JSON yang saya berikan (memposting komentar ke node 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"}]
]}}}

Ini sangat valid (berdasarkan pemeriksaan JSON online lainnya). Ini juga cocok dengan yang saya lihat dalam contoh pengujian layanan di /services/test/functional/ServivesResourceCommentTests.test

Namun, saya selalu mendapatkan pesan kesalahan yang sama. Ini tampaknya mirip dengan: Drupal 7 layanan objek json node

yang juga belum terselesaikan. Dapatkah seseorang membantu saya dengan pemformatan JSON yang tepat? Sungguh, yang ingin saya lakukan adalah mengoperkannya seperti:

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

tajuk http saya tampak ok dan pengguna / login berfungsi dengan baik.

elaydin
sumber

Jawaban:

5

JSON berikut ini tampaknya menjadi minimum yang Anda butuhkan untuk mengirim komentar:

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

Karena tidak ada pengguna, mengomentari "example.com/node/1" ini perlu dihidupkan dan izin untuk pengguna anonim untuk mengirim komentar harus ditetapkan.

bendiy
sumber
2

Ternyata saya mencoba membuat node / komentar tanpa otentikasi, dan situs tidak mengizinkan pengguna anonim untuk membuat node / komentar. Setelah saya mengaktifkan sesi auth, masuk dengan benar, semuanya bekerja dengan baik.

elaydin
sumber
1
Jadi, Anda mengaktifkan sesi auth di layanan Drupal atau di klien REST Anda? Bisakah Anda memberikan beberapa tip cepat tentang bagaimana Anda melakukan ini?
ted.strauss
2

Bisakah Anda memberi tahu saya URL apa yang akan Anda posting json string ini Saya telah mencari di seluruh web untuk beberapa dokumentasi cara membuat komentar pada node menggunakan layanan 3. Dokumentasi pada modul ini benar-benar kurang. Saya sudah mencoba memposting ke:

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

example.com/api/comment.json

example.com/api/comment/create.json

Sepertinya tidak ada yang berhasil. Saya selalu mendapatkan "404 Tidak Ditemukan: Tidak dapat menemukan controller"

EDIT: segera setelah saya memposting ini saya berhasil. Jika itu akan membantu orang lain Anda memposting string json Anda ke:

example.com/api/comment.json

Jika Anda menggunakan Poster untuk menguji, pastikan untuk mengatur jenis konten ke aplikasi / json. Saat menggunakan jquery pastikan Anda mengatur dataType: 'json'.

Gregg
sumber
2

Berikut adalah beberapa contoh untuk membuat dan memperbarui node dan komentar dalam format berikut:

  • Metode HTTP
  • Jenis konten
  • Jalur URL
  • Data untuk dikirim

Node Buat

  • POS
  • ContentType: application / json
  • ? q = titik akhir / node.json

    {"type": "article", "title": "t8yZUfX2it", "language": "und"}

Pembaruan Node

  • TARUH
  • ContentType: application / json
  • ? q = titik akhir / simpul / 123.json

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

Komentar Buat

  • POS
  • ContentType: application / json
  • ? q = titik akhir / comment.json

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

Pembaruan komentar

  • TARUH
  • ContentType: application / x-www-form-urlencoded
  • ? q = titik akhir / komentar / 456.json

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

tyler.frankenstein
sumber
1
Ini bekerja dengan baik. Seharusnya jawaban yang diterima! satu hal yang perlu diingat adalah menambahkan kunci: "Tipe Konten" nilai: "application / json" ke header Anda jika Anda menguji dari tukang pos Chrome. Ini adalah sumber daya lain yang tak ternilai: https://www.drupal.org/node/1447020
longboardnode
1

Saya mendapatkan masalah yang sama bahkan ketika hanya menguji dengan poster plugin firefox. Ternyata itu hanya ruang ekstra putih dan beberapa format sederhana lainnya (seperti lolos) yang melakukannya. Berikut adalah daftar yang berfungsi dalam tes saya sendiri untuk apa yang saya butuhkan:

BUAT KARYA PENGGUNA = titik akhir / pengguna

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

KARYA MASUK = titik akhir / pengguna / login

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

BUAT KARYA FILE = titik akhir / file

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

CREATE NODE WORKS = titik akhir / simpul

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
7 keajaiban
sumber