usa tutorial que para elastic consultas comandos java rest restlet

java - tutorial - ¿Está bien que REST devuelva el contenido después del POST?



para que se usa elastic search (5)

Dos preguntas diferentes:

¿El patrón de la aplicación REST admite la devolución de datos en un POST?

No creo que REST lo desautorice explícitamente, pero el tratamiento preferido se detalla en la respuesta de Darrel.

¿El marco RESTlet permite devolver datos en un POST?

Sí, aunque devuelve vacío, en una clase que amplía el recurso, tiene acceso completo al objeto de objeto de respuesta a través del método getResponse (). Entonces puede llamar a getResponse (). SetEntity () con los datos que desee.

Estoy usando RESTlet y he creado un recurso. Manejo el POST anulando el método acceptRepresentation.

El cliente debe enviarme algunos datos, luego los almaceno en DB, establezco la respuesta a 201 (SUCCESS_CREATED) y debo devolver algunos datos al cliente, pero el tipo de devolución de acceptRepresentation es nulo.

En mi caso, necesito devolver algún identificador para que el cliente pueda acceder a ese recurso.

Por ejemplo, si tengo un recurso con URL / recurso y el cliente envía una solicitud POST, agrego una nueva fila en DB y su dirección debe ser / resource / {id}. Necesito enviar {id}.

¿Estoy haciendo algo mal? ¿Los principios de REST permiten devolver algo después del POST? En caso afirmativo, ¿cómo puedo hacerlo? Si no, ¿cuál es la forma de manejar esta situación?


Envíelo en cualquier formato que se solicite. Eso podría ser:

<success> <id>5483</id> </success>

O:

{ "type": "success", "id": 5483 }

Depende de lo que usualmente haces. Si no están esperando los datos, simplemente deberían ignorarlos, pero cualquier cliente que quiera manejarlos correctamente debería poder hacerlo.


Me abstendré de enviar algo en el cuerpo de la respuesta. Simplemente configure Ubicación: en la URL (completa) del recurso recién creado.

Su descripción sugiere que esta es exactamente la semántica que usted:

  1. POST una cosa para crearlo
  2. Responda lo suficiente para saber dos cosas:
    1. Que la creación sucedió (el 201)
    2. Dónde encontrar lo nuevo (el encabezado de ubicación)

Cualquier otra cosa es superfluo.


REST simplemente dice que debe ajustarse a la interfaz uniforme. En otras palabras, dice que debe hacer lo que se supone que debe hacer POST según las especificaciones HTTP . Aquí está la cita de esa especificación que es relevante,

Si se ha creado un recurso en el servidor de origen, la respuesta DEBERÍA ser 201 (Creado) y contener una entidad que describa el estado de la solicitud y haga referencia al nuevo recurso, y un encabezado de Ubicación (ver sección 14.30).

Como puede ver a partir de esto, tiene dos lugares donde puede indicar al cliente dónde reside el recurso recién creado. El encabezado de ubicación debe tener una URL que apunta al nuevo recurso y también puede devolver una entidad con los detalles.

No estoy seguro de cuál es la diferencia entre reemplazar acceptRepresentation () y anular la publicación () pero this ejemplo muestra cómo devolver una respuesta desde un POST.


Si responde 201 Creado con un cuerpo de entidad, en lugar de un redireccionamiento de ubicación, entonces es una buena idea incluir un encabezado de ubicación de contenido que apunte al recurso que se está representando en la respuesta.

Esto evitará confusiones potenciales, en las cuales un cliente podría (justificadamente) asumir que la entidad de respuesta en realidad representa un nuevo estado del "creador", y no el recurso creado.

> POST /collection > ..new item.. < 201 Created < Location: /collection/1354 < Content-Location: /collection/1354 < <div class="item">This is the new item that was created</div>