Створення коментарів та вузлів за допомогою служб 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 Drupal 7

що також є невирішеним. Чи може хтось допомогти мені з належним форматуванням 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

Чи можете ви сказати мені, за якою URL-адресою ви розмістили б цей рядок json. Я шукав по всій мережі Інтернет документацію, як створити коментар до вузла за допомогою служб 3. Документації на цей модуль повністю відсутні. Я спробував розмістити повідомлення на:

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

example.com/api/comment.json

example.com/api/comment/create.json

Здається, нічого не працює. Я завжди отримую "404 не знайдено: не вдалося знайти контролер"

EDIT: як тільки я опублікував це, я почав працювати. Якщо це допоможе будь-кому іншому, ви опублікуєте свою рядок json на:

example.com/api/comment.json

Якщо ви використовуєте Poster для тестування, не забудьте встановити тип вмісту для application / json. Під час використання jquery переконайтеся, що ви встановили dataType: 'json'.


2

Ось кілька прикладів створення та оновлення вузлів та коментарів у наступному форматі:

  • HTTP-метод
  • Тип вмісту
  • Шлях до URL-адреси
  • Дані для надсилання

Вузол Створення

  • POST
  • Тип вмісту: application / json
  • ? q = кінцева точка / node.json

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

Оновлення вузла

  • ПУТ
  • Тип вмісту: application / json
  • ? q = кінцева точка / вузол / 123.json

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

Коментар Створити

  • POST
  • Тип вмісту: application / json
  • ? q = кінцева точка / comment.json

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

Оновлення коментарів

  • ПУТ
  • ContentType: application / x-www-form-urlencoded
  • ? q = кінцева точка / коментар / 456.json

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


1
Це добре працює. Повинна бути прийнята відповідь! слід пам’ятати про те, щоб додати у свій заголовок ключ: «Тип вмісту»: «додаток / 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"}

СТВОРИТИ ФАЙЛ РОБОТИ = кінцева точка / файл

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

СТВОРИТИ РОБОТИ УЗИ = кінцева точка / вузол

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.