Создание комментариев и узлов с помощью сервисов 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

однако я всегда получаю одно и то же сообщение об ошибке. Это похоже на: Drupal 7 обслуживает объект узла json

что также не решено. Может кто-нибудь помочь мне с правильным форматированием JSON? На самом деле все, что я хочу сделать, это передать что-то вроде:

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

мои http заголовки кажутся нормальными и user / login работал нормально.

elaydin
источник

Ответы:

5

Следующий JSON - это минимум, который вам необходим для публикации комментария:

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

Поскольку пользователя нет, комментирование этого «example.com/node/1» должно быть включено, а анонимным пользователям необходимо оставлять разрешения на публикацию комментариев.

bendiy
источник
2

Оказывается, я пытался создать узлы / комментарии без аутентификации, и сайт не позволял анонимным пользователям создавать узлы / комментарии. Как только я включил аутентификацию сессии, вошел в систему должным образом, все работало хорошо.

elaydin
источник
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 Not Found: Не удалось найти контроллер»

РЕДАКТИРОВАТЬ: как только я опубликовал это, я получил его на работу. Если это кому-то поможет, отправьте свою строку json по адресу:

example.com/api/comment.json

Если вы используете Poster для тестирования, обязательно установите тип контента для application / json. При использовании jquery убедитесь, что вы установили dataType: 'json'.

Gregg
источник
2

Вот несколько примеров для создания и обновления узлов и комментариев в следующем формате:

  • HTTP метод
  • Тип содержимого
  • URL-путь
  • Данные для отправки

Узел Создать

  • ПОЧТА
  • ContentType: application / json
  • ? Д = конечная точка / node.json

    { "Типа": "статья", "название": "t8yZUfX2it", "язык": "унд"}

Обновление узла

  • ПОЛОЖИЛ
  • ContentType: application / json
  • ? Д = конечная точка / узел / 123.json

    { "Узел": { "NID": "123", "название": "9AjrXJhWMI", "язык": "унд"}}

Комментарий Создать

  • ПОЧТА
  • ContentType: application / json
  • ? Д = конечная точка / comment.json

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

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

  • ПОЛОЖИЛ
  • ContentType: application / x-www-form-urlencoded
  • ? Д = конечная точка / комментарий / 456.json

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

tyler.frankenstein
источник
1
Это хорошо работает. Должен быть принятый ответ! Одна вещь, которую нужно запомнить, это добавить ключ: значение «Content-Type»: «application / json» в заголовок, если вы тестируете почтальон Chrome. Это еще один бесценный ресурс: https://www.drupal.org/node/1447020
longboardnode
1

У меня возникали похожие проблемы даже при тестировании с постером плагина Firefox. Оказывается, это были просто дополнительные пробелы и некоторое другое простое форматирование (например, экранирование), которое делало это. Вот список того, что работает в моих собственных тестах для того, что мне нужно:

CREATE USER WORKS = конечная точка / пользователь

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

LOGIN WORKS = конечная точка / пользователь / логин

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

СОЗДАТЬ ФАЙЛ РАБОТЫ = конечная точка / файл

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

CREATE NODE WORKS = конечная точка / узел

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
7wonders
источник