Tạo bình luận và nút với Dịch vụ 3.x và JSON


10

Tôi gặp sự cố khi nhận dịch vụ để nhận ra POST tới /comment.json. Tôi có một vấn đề tương tự với việc tạo các nút là tốt.

Sau đây là lỗi tôi nhận được: HTTP / 1.1 406 Không được chấp nhận: Thiếu nhận xét đối số bắt buộc

Thông báo này xuất phát từ tệp: /service/server/rest_server/includes/RESTServer.inc Cụ thể, các dòng:

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

về cơ bản, nó dường như nghĩ rằng đối số "bình luận" bị thiếu (và nó không phải là tùy chọn).

Đây là một trong nhiều bit của JSON mà tôi đã đưa ra (đăng bình luận lên nút 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"}]
]}}}

Nó hoàn toàn hợp lệ (dựa trên các kiểm tra JSON trực tuyến khác). Nó cũng khớp với những gì tôi thấy trong các ví dụ kiểm tra dịch vụ tại /service/test/feftal/ServivesResourceVerTests.test

tuy nhiên, tôi luôn nhận được thông báo lỗi tương tự. Điều này có vẻ tương tự như: Drupal 7 dịch vụ đối tượng nút json

cái nào cũng chưa được giải quyết. Ai đó có thể giúp tôi với định dạng JSON thích hợp không? Thực sự, tất cả những gì tôi muốn làm là vượt qua nó như:

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

tiêu đề http của tôi có vẻ ổn và người dùng / đăng nhập hoạt động tốt.

Câu trả lời:


5

JSON sau đây dường như là mức tối thiểu bạn cần để viết bình luận:

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

Vì không có người dùng, nên cần phải bật nhận xét về "example.com/node/1" này và các quyền cho người dùng ẩn danh để đăng nhận xét cần phải được đặt.


2

Hóa ra tôi đã cố gắng tạo các nút / bình luận mà không cần xác thực và trang web không cho phép người dùng ẩn danh tạo các nút / bình luận. Khi tôi bật phiên auth, đăng nhập đúng cách, mọi thứ sẽ hoạt động tốt.


1
Vì vậy, bạn đã bật phiên auth trong dịch vụ Drupal hoặc trong ứng dụng khách REST của bạn? Bạn có thể cho một số lời khuyên nhanh về cách bạn đã làm điều này?
ted.strauss

2

Bạn có thể cho tôi biết URL nào bạn sẽ đăng chuỗi json này không. Tôi đã tìm kiếm trên web một số tài liệu về cách tạo nhận xét về một nút bằng các dịch vụ 3. Tài liệu về mô-đun này hoàn toàn thiếu. Tôi đã thử đăng lên:

example.com/api/node/ đũanid Bolog / com.j.j

example.com/api/comment.json

example.com/api/comment/create.json

Dường như không có gì để làm việc Tôi luôn nhận được "404 Không tìm thấy: Không thể tìm thấy bộ điều khiển"

EDIT: ngay sau khi tôi đăng bài này, tôi đã làm cho nó hoạt động. Nếu nó sẽ giúp bất cứ ai khác bạn đăng chuỗi json của bạn lên:

example.com/api/comment.json

Nếu bạn đang sử dụng Poster để kiểm tra, hãy đảm bảo đặt loại nội dung thành ứng dụng / json. Khi sử dụng jquery, đảm bảo bạn đặt dataType: 'json'.


2

Dưới đây là một số ví dụ để tạo và cập nhật các nút và nhận xét theo định dạng sau:

  • Phương thức HTTP
  • Loại nội dung
  • Đường dẫn URL
  • Dữ liệu cần gửi

Tạo nút

  • BÀI ĐĂNG
  • ContentType: application / json
  • ? q = điểm cuối / node.json

    {"loại": "bài viết", "tiêu đề": "t8yZUfX2it", "ngôn ngữ": "und"}

Cập nhật nút

  • ĐẶT
  • ContentType: application / json
  • ? q = điểm cuối / nút / 123.json

    {"nút": {"nid": "123", "title": "9AjrXJhWMI", "ngôn ngữ": "und"}}

Nhận xét Tạo

  • BÀI ĐĂNG
  • ContentType: application / json
  • ? q = điểm cuối / bình luận.json

    {"chủ đề": "liJmJfpqMX", "comment_body": {"und": [{"value": "9DyaNZi3lA"}]}, "nid": "18"}

Cập nhật bình luận

  • ĐẶT
  • ContentType: application / x-www-form-urlencoding
  • ? q = điểm cuối / nhận xét / 456.json

    {cid: 456, "chủ đề": "hzU27R6daE", "comment_body": {"und": [{"value": "BqZU5DwArD"}]}, "nid": "18"}


1
Điều này hoạt động tốt. Nên là câu trả lời được chấp nhận! một điều cần nhớ là thêm khóa: giá trị "Loại nội dung": "application / json" vào tiêu đề của bạn nếu bạn đang thử nghiệm từ người đưa thư Chrome. Đây là một tài nguyên vô giá khác: https://www.drupal.org/node/1447020
longboardnode

1

Tôi đã gặp vấn đề tương tự ngay cả khi chỉ thử nghiệm với poster plugin firefox. Nó chỉ ra rằng nó khá đơn giản là các khoảng trắng thêm và một số định dạng đơn giản khác (chẳng hạn như thoát) đang làm điều đó. Dưới đây là danh sách những gì hoạt động trong các thử nghiệm của riêng tôi cho những gì tôi cần:

TẠO CÔNG TRÌNH NGƯỜI DÙNG = điểm cuối / người dùng

{"name":"myusername","pass":"12345678","mail":"myemail@example.com","status":"1"}

ĐĂNG NHẬP CÔNG TRÌNH = điểm cuối / người dùng / đăng nhập

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

TẠO CÔNG TRÌNH TẬP TIN = endpoint / file

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

TẠO NODE WORKS = điểm cuối / nút

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.