การสร้างความคิดเห็นและโหนดด้วย Services 3.x และ JSON


10

ฉันมีปัญหาในการรับบริการเพื่อรับรู้ POST ถึง /comment.json ฉันมีปัญหาคล้ายกันกับการสร้างโหนดเช่นกัน

ต่อไปนี้เป็นข้อผิดพลาดที่ฉันได้รับ: 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);
  }

โดยทั่วไปดูเหมือนว่าการโต้แย้ง "ความคิดเห็น" หายไป (และไม่ใช่ทางเลือก)

นี่เป็นหนึ่งในหลาย ๆ ส่วนของ 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

อย่างไรก็ตามฉันได้รับข้อความแสดงข้อผิดพลาดเดียวกันเสมอ สิ่งนี้ดูเหมือนกับ: วัตถุโหนด json ของ Drupal 7 services

ซึ่งยังไม่ได้แก้ไข มีคนช่วยฉันในการจัดรูปแบบ 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 นี้ ฉันได้ดูเอกสารทั้งหมดเกี่ยวกับวิธีการสร้างความคิดเห็นบนโหนดโดยใช้บริการทางเว็บ 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 = ปลายทาง / node.json

    { "type": "บทความ", "ชื่อ": "t8yZUfX2it", "ภาษา": "คาดไม่ถึง"}

การปรับปรุงโหนด

  • PUT
  • ContentType: application / json
  • ? q = ปลายทาง / โหนด / 123.json

    { "โหนด": { "nid": "123", "ชื่อ": "9AjrXJhWMI", "ภาษา": "คาดไม่ถึง"}}

ความคิดเห็นสร้าง

  • โพสต์
  • ContentType: application / json
  • ? q = ปลายทาง / comment.json

    {"subject": "liJmJfpqMX", "comment_body": {"und": [{"ค่า": "9DyaNZi3lA"}]}, "nid": "18"}

ปรับปรุงความคิดเห็น

  • PUT
  • ContentType: application / x-www-form-urlencoded
  • ? q = ปลายทาง / ความคิดเห็น / 456.json

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


1
มันใช้งานได้ดี ควรเป็นคำตอบที่ยอมรับได้! สิ่งหนึ่งที่ควรจดจำคือการเพิ่มคีย์: ค่า "ประเภทเนื้อหา": "application / json" ไปยังส่วนหัวของคุณหากคุณกำลังทดสอบจากบุรุษไปรษณีย์ Chrome นี่เป็นอีกหนึ่งทรัพยากรที่มีค่า: https://www.drupal.org/node/1447020
longboardnode

1

ฉันได้รับปัญหาที่คล้ายกันแม้เพียงแค่ทดสอบกับโปสเตอร์ปลั๊กอิน Firefox ปรากฎว่ามันเป็นเพียงแค่ช่องว่างพิเศษและการจัดรูปแบบเรียบง่ายอื่น ๆ (เช่นการหลบหนี) ที่ทำ นี่คือรายการของการทำงานในการทดสอบของฉันเองสำหรับสิ่งที่ฉันต้องการ:

สร้างผลงานผู้ใช้ = ปลายทาง / ผู้ใช้

{"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 = endpoint / node

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.