Crear comentarios y nodos con Servicios 3.xy JSON


10

Tengo problemas para obtener servicios para reconocer una POST a /comment.json. Tengo un problema similar con la creación de nodos también.

El siguiente es el error que obtengo: HTTP / 1.1 406 No aceptable: falta el comentario de argumento requerido

Este mensaje proviene del archivo: /services/server/rest_server/includes/RESTServer.inc Específicamente, las líneas:

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

básicamente, parece pensar que falta el argumento "comentario" (y no es opcional).

Este es uno de los muchos bits de JSON que le he dado (publicar un comentario en el nodo 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"}]
]}}}

Es perfectamente válido (basado en otras comprobaciones JSON en línea). También coincide con lo que veo en los ejemplos de prueba de servicios en /services/test/functional/ServivesResourceCommentTests.test

Sin embargo, siempre recibo el mismo mensaje de error. Esto parece similar a: Drupal 7 services json node object

que tampoco está resuelto. ¿Alguien puede ayudarme con el formato JSON adecuado? Realmente, todo lo que quiero hacer es pasarle algo como:

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

mis encabezados http parecen estar bien y usuario / inicio de sesión funcionó bien.

Respuestas:


5

El siguiente JSON parece ser el mínimo que necesita para publicar un comentario:

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

Como no hay usuario, es necesario activar los comentarios sobre este "ejemplo.com/nodo/1" y se deben establecer permisos para que los usuarios anónimos publiquen comentarios.


2

Resulta que estaba tratando de crear nodos / comentarios sin autenticación, y el sitio no permitía que los usuarios anónimos crearan nodos / comentarios. Una vez que encendí la autenticación de sesión, inicié sesión correctamente, las cosas funcionaron bien.


1
¿Entonces activó la autenticación de sesión en los servicios de Drupal o en su cliente REST? ¿Puedes darnos algunos consejos rápidos sobre cómo hiciste esto?
ted.strauss

2

¿Puede decirme en qué URL publicaría esta cadena json? He estado buscando en toda la web algún tipo de documentación sobre cómo crear un comentario en un nodo utilizando los servicios 3. La documentación en este módulo es completamente insuficiente. He intentado publicar en:

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

example.com/api/comment.json

example.com/api/comment/create.json

Nada parece funcionar. Siempre aparece "404 No encontrado: no se pudo encontrar el controlador"

EDITAR: tan pronto como publiqué esto, lo puse a trabajar. Si ayudará a alguien más, publique su cadena json en:

example.com/api/comment.json

Si está utilizando Poster para probar, asegúrese de establecer el tipo de contenido en application / json. Cuando use jquery, asegúrese de establecer dataType: 'json'.


2

Aquí hay algunos ejemplos para crear y actualizar nodos y comentarios en el siguiente formato:

  • Método HTTP
  • Tipo de contenido
  • Ruta URL
  • Datos a enviar

Crear nodo

  • ENVIAR
  • ContentType: application / json
  • ? q = punto final / nodo.json

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

Actualización de nodo

  • PONER
  • ContentType: application / json
  • ? q = punto final / nodo / 123.json

    {"nodo": {"nid": "123", "título": "9AjrXJhWMI", "idioma": "und"}}

Comentario Crear

  • ENVIAR
  • ContentType: application / json
  • ? q = punto final / comentario.json

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

Actualización de comentarios

  • PONER
  • ContentType: application / x-www-form-urlencoded
  • ? q = punto final / comentario / 456.json

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


1
Esto funciona bien ¡Debería ser la respuesta aceptada! una cosa para recordar es agregar la clave: valor "Tipo de contenido": "aplicación / json" a su encabezado si está probando desde el cartero de Chrome. Este es otro recurso invaluable: https://www.drupal.org/node/1447020
longboardnode

1

Tenía problemas similares incluso cuando solo probaba con el póster del complemento de Firefox. Resulta que lo que estaba haciendo era simplemente los espacios en blanco adicionales y algún otro formato simple (como escapes). Aquí hay una lista de lo que funciona en mis propias pruebas para lo que necesitaba:

CREAR TRABAJOS DE USUARIO = punto final / usuario

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

LOGIN WORKS = punto final / usuario / inicio de sesión

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

CREAR TRABAJOS DE ARCHIVO = punto final / archivo

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

CREAR TRABAJOS DE NODO = punto final / nodo

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.