Trabajo con rutas para las API de WebSocket - Amazon API Gateway

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Trabajo con rutas para las API de WebSocket

En la API de WebSocket, los mensajes JSON entrantes se dirigen a las integraciones de backend en función de las rutas que se hayan configurado. (Los mensajes que no son de JSON se dirigen a la ruta $default que se configure).

Una ruta incluye una clave de ruta, que es el valor que se espera una vez que se evalúa una expresión de selección de ruta. routeSelectionExpression es un atributo definido en el nivel de API. Especifica una propiedad JSON cuya presencia se espera en la carga del mensaje. Para obtener más información sobre las expresiones de selección de ruta, consulte Expresiones de selección de ruta.

Por ejemplo, si los mensajes JSON contienen una propiedad action y desea realizar diferentes acciones en función de esta propiedad, la expresión de selección de ruta podría ser ${request.body.action}. La tabla de enrutamiento especificaría la acción que se debe realizar comparando el valor de la propiedad action con los valores de clave de ruta personalizados que se han definido en la tabla.

Existen tres rutas predefinidas que se pueden utilizar: $connect, $disconnect y $default. Además, es posible crear rutas personalizadas.

  • API Gateway llama a la ruta $connect al iniciarse una conexión persistente entre el cliente y una API de WebSocket.

  • API Gateway llama a la ruta $disconnect cuando el cliente o el servidor se desconecta de la API.

  • API Gateway llama a una ruta personalizada después de evaluar la expresión de selección de ruta con respecto al mensaje si se encuentra una ruta coincidente; esta coincidencia determina qué integración se invoca.

  • API Gateway llama a la ruta $default si la expresión de selección de ruta no puede evaluarse con respecto al mensaje o no se encuentra ninguna ruta coincidente.

Expresiones de selección de ruta

Una expresión de selección de ruta se evalúa cuando el servicio está seleccionando la ruta que debe seguir un mensaje entrante. El servicio utiliza la ruta cuya routeKey coincida exactamente con el valor evaluado. Si no hay ninguna coincidencia y existe una ruta con la clave de ruta $default, se selecciona esta. Si no hay rutas que coincidan con el valor evaluado y no existe ninguna ruta $default, el servicio devuelve un error. En las API basadas en WebSocket, la expresión debe tener el formato $request.body.{path_to_body_element}.

Por ejemplo, supongamos que está enviando el siguiente mensaje JSON:

{ "service" : "chat", "action" : "join", "data" : { "room" : "room1234" } }

Es posible que desee seleccionar el comportamiento de la API en función de la propiedad action. En ese caso, podría definir la siguiente expresión de selección de ruta:

$request.body.action

En este ejemplo, request.body hace referencia a la carga JSON del mensaje y .action es una expresión JSONPath. Puede utilizar cualquier expresión de ruta JSON después de request.body, pero tenga en cuenta que el resultado se representará en forma de cadena. Por ejemplo, si la expresión JSONPath devuelve una matriz de dos elementos, esta se presentará como la cadena "[item1, item2]". Por este motivo, es conveniente que la expresión dé como resultado un valor y no una matriz ni un objeto.

Puede utilizar simplemente un valor estático o puede utilizar varias variables. En la tabla siguiente, se muestran ejemplos y sus resultados evaluados frente a la carga anterior.

Expresión Resultado evaluado Descripción
$request.body.action join Una variable desencapsulada
${request.body.action} join Una variable encapsulada
${request.body.service}/${request.body.action} chat/join Varias variables con valores estáticos
${request.body.action}-${request.body.invalidPath} join- Si no se encuentra JSONPath, la variable se resueve como "".
action action Valor estático
\$default $default Valor estático

El resultado evaluado se utiliza para encontrar una ruta. Si hay una ruta con una clave de ruta coincidente, se selecciona la ruta para procesar el mensaje. Si no se encuentra ninguna ruta coincidente, API Gateway intenta encontrar la ruta $default si está disponible. Si no se ha definido la ruta $default, API Gateway devuelve un error.

Configuración de rutas para una API de WebSocket en API Gateway

La primera vez que se crea una API de WebSocket, existen tres rutas predefinidas: $connect, $disconnect y $default. Puede crearlas mediante la consola, la API o la AWS CLI. Si lo desea, puede crear rutas personalizadas. Para obtener más información, consulte Acerca de WebSocket las API en API Gateway.

nota

En la CLI, puede crear las rutas antes o después de crear las integraciones y puede volver a utilizar la misma integración para varias rutas.

Creación de una ruta mediante la consola de API Gateway

Para crear una ruta mediante la consola de API Gateway
  1. Inicie sesión en la consola de API Gateway, elija la API y, a continuación, elija Routes (Rutas).

  2. Elija Crear ruta.

  3. En Clave de la ruta, ingrese el nombre de la clave de la ruta. Puede crear las rutas predefinidas ($connect, $disconnect y $default) o una ruta personalizada.

    nota

    Cuando cree una ruta personalizada, no utilice el prefijo $ en el nombre de la clave de ruta. Este prefijo está reservado para las rutas predefinidas.

  4. Seleccione y configure el tipo de integración de la ruta. Para obtener más información, consulte Configurar una solicitud de integración de WebSocket API mediante la consola API Gateway.

Creación de una ruta utilizando la AWS CLI

Para crear una ruta utilizando la AWS CLI, llame a create-route, como se muestra en el ejemplo siguiente:

aws apigatewayv2 --region us-east-1 create-route --api-id aabbccddee --route-key $default

Ejemplo de resultados:

{ "ApiKeyRequired": false, "AuthorizationType": "NONE", "RouteKey": "$default", "RouteId": "1122334" }

Especificación de los ajustes de la solicitud de ruta para $connect

Cuando se configura la ruta $connect para la API, están disponibles los siguientes ajustes opcionales para permitir la autorización para la API. Para obtener más información, consulte La ruta $connect.

  • Authorization (Autorización): si no se necesita autorización, puede especificar NONE. De lo contrario, puede especificar:

    • AWS_IAM para utilizar políticas estándar de AWS IAM con el fin de controlar el acceso a la API.

    • CUSTOM para implementar la autorización para una API mediante la especificación de una función de autorizador de Lambda que se ha creado previamente. El autorizador puede encontrarse en su propia cuenta de AWS o en otra cuenta de AWS. Para obtener más información sobre los autorizadores de Lambda, consulte Uso de autorizadores Lambda de API Gateway.

      nota

      En la consola de API Gateway, la configuración de CUSTOM solo es visible después de que se haya configurado una función de autorizador como se describe en Configuración de un autorizador de Lambda mediante la consola de API Gateway.

    importante

    El valor de Authorization (Autorización) se aplica a toda la API, no solo a la ruta $connect. La ruta $connect protege a las demás rutas, porque se la llama en cada conexión.

  • API Key Required (Clave de API obligatoria): si lo desea, puede exigir el uso de una clave de API para la ruta $connect de una API. Puede utilizar las claves de API junto con los planes de uso para controlar y realizar un seguimiento del acceso a sus API. Para obtener más información, consulte Creación y uso de planes de uso con claves de API.

Configuración de la solicitud de ruta $connect con la consola API Gateway

Para configurar la solicitud de la ruta $connect para una API de WebSocket mediante la consola de API Gateway:

  1. Inicie sesión en la consola de API Gateway, elija la API y, a continuación, elija Routes (Rutas).

  2. En Rutas, elija $connect o cree una ruta $connect según Creación de una ruta mediante la consola de API Gateway.

  3. En la sección Configuración de la solicitud de ruta, elija Editar.

  4. En Autorización, seleccione un tipo de autorización.

  5. Para solicitar una API para la ruta $connect, seleccione Solicitar clave de API.

  6. Elija Guardar cambios.