Bagaimana cara POST node baru?

16

Saya telah merujuk banyak tautan termasuk yang berikut:

Saya mencoba beberapa cara untuk POST node baru ke situs Drupal, tetapi saya gagal. Saya telah membuat sampel CCK untuk menyimpan data siswa dengan nama, usia, jenis kelamin, DOB, dan menambahkan beberapa daftar.

Saya telah menginstal dan mengkonfigurasi modul Layanan (D7), dan membuat titik akhir layanan di layanan.
Seperti yang diharapkan, GET adalah cara termudah untuk mendapatkan detail node di JSON. http://localhost/drupal/services/nodecukup daftarkan semua node.

Saya masih tidak tahu bagaimana cara menggunakan metode POST .

  1. Saya ingin mencari siswa yang namanya berisi john . Saya mencoba localhost/drupal/services/node&node[name]=john. Saya menggunakan plugin POST Man untuk Chrome tanpa hasil. Saya juga mencoba beberapa cara lain.

  2. Saya mencoba menambahkan siswa baru ke situs tanpa hasil.

Adakah yang bisa membimbing saya untuk membuat pekerjaan di atas baik-baik saja?

PEMBARUAN:

Saya mencoba menambahkan node baru dari artikel jenis . Itu bekerja dengan baik. tetapi ketika saya mencoba untuk menambahkan node jenis Departemen CCK Itu menunjukkan " s: 22:" Validasi CSRF gagal "; " Berikut adalah screenshot

Saya telah melalui tautan https://drupal.org/node/2013781

Saya mengikuti session = session_name = session_id tetapi saya masih mendapatkan kesalahan.
masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Ramaraju.d
sumber
Apa yang terjadi ketika Anda mencoba POST suatu node? Apakah Anda mendapatkan pesan kesalahan? Jika demikian, apakah itu?
Gaelan

Jawaban:

22

Semoga ini bisa membantu Anda,

Untuk Drupal 7

Alat yang digunakan:

  • Firefox Poster add-on untuk melakukan tes dan debugging. Mungkin ada tambahan lainnya juga. Tapi untuk contoh ini saya menggunakan add-on Firefox.
  • Untuk membantu mengedit dan memvalidasi data JSON yang dapat Anda gunakan
    • Edit data JSON menggunakan tautan ini
    • Validasi data JSON menggunakan tautan ini

Permintaan HTTP

  • Untuk membuat permintaan HTTP, Anda perlu menggunakan add-on POSTER Firefox .

  • Dua metode yang biasa digunakan untuk permintaan-respons antara klien dan server adalah:

    • DAPATKAN
    • POS
  • Setelah add-on Diunduh. Buka Firefox -> Tools -> Poster

    masukkan deskripsi gambar di sini

  • Pastikan untuk mengaktifkan otentikasi Sesi . Setelah Layanan dikonfigurasi dengan benar, sebelum membuat simpul Anda harus masuk . Setelah login, Anda dapat membuat node.

  • Untuk login gunakan metode POST, dengan URL seperti - http://XXXXXXXX.com/demo/rulebook/rulebook_endpoint/user/login

    masukkan deskripsi gambar di sini

  • Jika itu adalah pengguna yang valid maka itu akan mengembalikan detail pengguna dengan ID sesi dan Nama . Jika tidak valid maka Access akan ditolak

    masukkan deskripsi gambar di sini

  • Dengan menggunakan nama dan ID Sesi di POST HEADER, kita dapat membuat simpul baru

    masukkan deskripsi gambar di sini

  • Sekarang setelah menambahkan HEADER, Anda harus membuat permintaan HTTP POST dan memastikan pengguna harus memiliki izin untuk membuat simpul.

    masukkan deskripsi gambar di sini

  • Jika simpul dibuat, Anda akan mendapatkan respons dengan tautan simpul

    masukkan deskripsi gambar di sini

CATATAN: Jika Anda menginginkan respons di JSON, Anda harus selalu menambahkan .json di akhir URL. mis., http://XXXXXXXX.com/test/endpoint/user.json ATAU http://XXXXXXXX.com/test/endpoint/node.json ATAU http://XXXXXXXX.com/test/endpoint/user/user_id .json OR http://XXXXXXXX.com/test/endpoint/node/node_id.json

inizio
sumber
Maaf saya tidak mencentang opsi form url-encoded di modul layanan. dan inilah tanggapan 401: Tidak Diotorisasi: Otorisasi CSRF gagal. apa yang mungkin menyebabkan ini? Terima kasih banyak
Ramaraju.d
hai @inizio mungkin saya tahu atas dasar apa Anda menetapkan nilai sesi di HEADERS. Bisakah Anda memperjelasnya. Contoh, sessionId yang saya dapatkan adalah SESS29af1facda0a866a687d5055f2fade2c tetapi dalam jawaban Anda memiliki panjang yang lebih panjang!
Ramaraju.d
Nilai sesi dalam HEADERS terdiri dari session_name dan session_id. mis., session adalah variabel dan nilainya terdiri dari session_name = session_id. session = (session_name = session_value)
inizio
Dikatakan 401: Tidak Sah: Validasi CSRF gagal. Saya memberikan berikut ini sebagai nama header = nilai sesi = SESS29af1facda0a866a687d5055f2fade2c = gBVoqtkN2ZNjDyOjIfpz47oQpnmCKytcgHOCHZhKRzo
Ramaraju.d
Ya itu berhasil. Tetapi satu-satunya masalah, Pasal CCK memiliki judul, field_names, tubuh tetapi hanya judul yang disimpan dan simpul dibuat, tetapi bidang tubuh dan nama kosong. Cara mengatasinya.
Ramaraju.d
7

Untuk Drupal 7 dan Layanan 7.x-3.x

Langkah 1: Keluarkan permintaan pos untuk user.loginsumber daya dengan nama pengguna dan kata sandi Anda.

Jika login berhasil, Anda akan mendapatkan objek respons dengan 4 properti:

  • session_name
  • sessid
  • token
  • pengguna (objek)

Tangkapan layar dari google chrome postman Tangkapan layar dari google chrome postman

Langkah 2: Keluarkan permintaan pos nodedengan 2 header

  • Cookie: [session_name] = [sessid]
  • X-CSRF-Token: [token]

Tangkapan layar dari google chrome postman Tangkapan layar dari google chrome postman

Muhammad Reda
sumber
Saya mencoba menggunakan <endpoint> /user.login tetapi tidak repsonse : prntscr.com/gru4y6 - tidak yakin apa yang saya lakukan salah.
Patoshi パ ト シ
0

Jika Anda melakukan POST ke API REST, maka Anda harus memasukkan semuanya ke dalam data POST , bukan ke URL . Di tukang pos Anda dapat mengatur permintaan untuk mengirim, daripada mengetik ke x-www-form-urlencodeddan di bawah ini Anda dapat menambahkan nilai data Anda. Jangan lupa untuk menambahkan status, uid, bahasa, jenis, judul dan kemudian nilai tambahan. URL sumber daya seharusnya hanya HOST/REST_API_PATH/node.

itarato
sumber
1
Sedikit membingungkan. Oke, bisakah Anda memberi tahu saya apa yang harus menjadi parameter untuk membuat artikel baru? Jika Anda tidak keberatan, Anda dapat memposting contoh atau tautan sehingga saya dapat memiliki konsep yang jelas!
Ramaraju.d