Puedes acceder al message a través del estado y a través de alias. El message te permite leer cualquier cosa que envíe el cliente en la petición (cabeceras, body, queryParams, etc). Y te permite escribir sobre la respuesta que envíes al cliente (cabeceras, body, status, etc).
Estos son los métodos que puedes usar para leer/escribir el message desde dentro de una directiva:
- $state->message()->getHeaders() -> devuelve un array con todas las cabeceras.
- $state->message()->deleteHeaders() -> elimina todas las cabeceras.
- $state->message()->deleteHeader('NAME_HEADER') -> elimina una cabecera.
- $state->message()->setHeader('NAME_HEADER','VALUE_HEADER') -> añade o sobreescribe una cabecera.
- $state->message()->getHeader('NAME_HEADER') -> devuelve el valor de una cabecera.
- $state->message()->getQueryParams() -> devuelve un array con todos los queryParams.
- $state->message()->deleteQueryParams() -> elimina todos los queryParams.
- $state->message()->deleteQueryParam('NAME_QUERY_PARAM') -> elimina un queryParam.
- $state->message()->setQueryParam('NAME_QUERY_PARAM','VALUE_QUERY_PARAM') -> añade o sobreescribe un queryParam.
- $state->message()->getQueryParam('NAME_QUERY_PARAM') -> devuelve el valor de un queryParam.
- $state->message()->getQueryParamAsString() -> devuelve un string con la cadena de todos los queryParams que se usa en las urls.
- $state->message()->getPathParams() -> devuelve un array con todos los pathParams.
- $state->message()->deletePathParams() -> elimina todos los pathParams.
- $state->message()->deletePathParam('NAME_PATH_PARAM') -> elimina un pathParm.
- $state->message()->setPathParam('NAME_PATH_PARAM','VALUE_PATH_PARAM') -> añade o sobreescribe un pathParam.
- $state->message()->getPathParam('NAME_PATH_PARAM') -> devuelve el valor de un pathParam.
- $state->message()->getBody() -> devuelve el body como string.
- $state->message()->setBody('BODY') -> setea un nuevo body como string.
- $state->message()->getBodyAsArray() -> si el body recibido es un JSON, puedes acceder como un array con este método.
- $state->message()->setBodyAsArray() -> si el body enviado a cliente es un JSON, puedes escribir el body pasando un array con este método.
- $state->message()->setVerb('VERB') -> modifica el método.
- $state->message()->getVerb() -> devuelve el método.
- $state->message()->setStatus(STATUS) -> modifica el status pasando un integer.
- $state->message()->getStatus() -> devuelve el código de status actual como un entero (200, 404, etc).
Algunos de los métodos descritos anteriormente tienen sentido por cómo funcionan las conexiones a otros microservicios y APIs. Por ejemplo, pongamos que expones un endpoint llamado PUT /user, que en realidad se conecta a un microservicio cuya url es POST /users. En ese caso usarás una directiva como esta:
<?php /*dlv-code-engine***/
/*Directiva: ModifyRequest*/
$state->message()->setVerb('POST');
$state->message()->setPath('/users');
Que será invocada así:
key: poems
endpoints:
put /user:
ModifyRequest:
directive: ModifyRequest
Http:
directive: Http
host: https://microservice.com
Es decir, modificarás el verb y el path, para que al hacer la conexión, con la directiva Http, al microservicio, no se haga con el path y el verb, que estás exponiendo (PUT y /user). Sino la requerida por el microservicio.
Recuerda que también puedes usar alias para leer el message.
También puedes usar el message para acceder a la request que envía el cliente y/o modificar la response que envías al cliente como en este caso:
key: poems
endpoints:
get /ping:
MyCustomDirective:
directive: MyDirective
<?php /*dlv-code-engine***/
/*Directiva: MyDirective*/
$output = 'Hola hombre desconocido';
$name = $state->message()->getQueryParam('myname');
if ($name === 'isidoro') {
$output = 'Hola creador';
}
$state->message()->setStatus(201);
$state->message()->setHeader('Content-Type','application/json');
$state->message()->setBodyAsArray(
'text' => $output
);
En este caso se accede a un queryParam llamado myname, en caso de que sea isidoro se devolverá un JSON al cliente con el texto 'Hola creador', en caso contrario se enviará 'Hola hombre desconocido'. Siempre se enviará un 201.
Ir a la home