Criando comentários e nós com o Services 3.xe JSON


10

Estou tendo problemas para obter serviços para reconhecer um POST para /comment.json. Eu tenho um problema semelhante ao criar nós também.

A seguir está o erro que eu recebo: HTTP / 1.1 406 Não aceitável: Faltando comentário de argumento obrigatório

Esta mensagem vem do arquivo: /services/server/rest_server/includes/RESTServer.inc Especificamente, as linhas:

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

basicamente, parece pensar que o argumento "comment" está ausente (e não é opcional).

Este é um dos muitos bits de JSON que eu forneci (postando um comentário no nó 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"}]
]}}}

É perfeitamente válido (com base em outras verificações JSON online). Ele também corresponde ao que vejo nos exemplos de teste de serviços em /services/test/functional/ServivesResourceCommentTests.test

no entanto, sempre recebo a mesma mensagem de erro. Isso parece semelhante a: Drupal 7 services json node object

que também não foi resolvido. Alguém pode me ajudar com a formatação JSON adequada? Realmente, tudo o que eu quero fazer é passar algo como:

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

meus cabeçalhos http parecem ok e o usuário / login funcionou bem.

Respostas:


5

O seguinte JSON parece ser o mínimo que você precisa para publicar um comentário:

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

Como não há usuário, é necessário ativar o comentário sobre "example.com/node/1" e é necessário definir permissões para usuários anônimos postarem comentários.


2

Acontece que eu estava tentando criar nós / comentários sem autenticação, e o site não permitiu que usuários anônimos criassem nós / comentários. Depois de ativar a autenticação da sessão, logado corretamente, tudo funcionou bem.


1
Então você ativou a autenticação de sessão nos serviços Drupal ou no seu cliente REST? Você pode dar algumas dicas rápidas sobre como você fez isso?
ted.strauss

2

Você pode me dizer para qual URL você postaria essa string json. Eu tenho procurado por toda a Web alguma documentação sobre como criar um comentário em um nó usando os serviços 3. A documentação deste módulo está completamente ausente. Tentei postar em:

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

example.com/api/comment.json

example.com/api/comment/create.json

Nada parece funcionar. Sempre recebo "404 não encontrado: não foi possível encontrar o controlador"

EDIT: assim que postei isso, consegui que funcionasse. Se isso ajudar alguém, você postará sua string json em:

example.com/api/comment.json

Se você estiver usando o Poster para testar, defina o tipo de conteúdo como application / json. Ao usar o jquery, certifique-se de definir dataType: 'json'.


2

Aqui estão alguns exemplos para criar e atualizar nós e comentários no seguinte formato:

  • Método HTTP
  • Tipo de conteúdo
  • Caminho do URL
  • Dados a Enviar

Criação de Nó

  • POSTAR
  • ContentType: application / json
  • ? q = ponto final / node.json

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

Atualização do nó

  • COLOCAR
  • ContentType: application / json
  • ? q = ponto final / nó / 123.json

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

Criar comentário

  • POSTAR
  • ContentType: application / json
  • ? q = ponto final / comment.json

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

Atualização de comentários

  • COLOCAR
  • ContentType: application / x-www-form-urlencoded
  • ? q = ponto final / comentário / 456.json

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


1
Isso funciona bem. Deve ser a resposta aceita! uma coisa a lembrar é adicionar a chave: valor "Tipo de conteúdo": "application / json" ao seu cabeçalho, se você estiver testando no carteiro do Chrome. Este é outro recurso inestimável: https://www.drupal.org/node/1447020
longboardnode 7/16

1

Eu estava tendo problemas semelhantes mesmo quando apenas testava com o poster do plugin do Firefox. Acontece que foram simplesmente os espaços em branco extras e alguma outra formatação simples (como escapes) que estava fazendo isso. Aqui está uma lista do que funciona em meus próprios testes para o que eu precisava:

CRIAR TRABALHOS DE USUÁRIO = terminal / usuário

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

TRABALHOS DE LOGIN = terminal / usuário / login

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

CREATE FILE WORKS = ponto final / arquivo

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

CREATE NODE WORKS = nó de extremidade / nó

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.