Ehhhh
Ehhhh
Ehhhh
API Management (APIM ) es una manera de crear puertas de enlace de API coherentes y modernas para servicios
de back-end existentes.
API Management ayuda a las organizaciones a publicar API para desarrolladores externos, asociados e internos
para liberar el potencial de sus datos y servicios. Todas y cada una de las empresas pretenden extender sus
operaciones como una plataforma digital creando nuevos canales, buscando nuevos clientes y estrechando la
relación con los existentes. API Management proporciona las competencias esenciales para garantizar un
programa de API de éxito mediante compromisos con desarrolladores, información detallada empresarial,
análisis, seguridad y protección. Puede usar Azure API Management para tomar cualquier back-end e iniciar un
programa de API completo basado en él.
Este artículo proporciona información general de escenarios comunes que implican a APIM. También ofrece una
breve descripción de los componentes principales del sistema de APIM. El artículo, a continuación, proporciona
una descripción más detallada de cada uno.
Información general
Para usar API Management, los administradores crean API. Cada API consta de una o varias operaciones y se
puede agregar a uno o varios productos. Para usar una API, los desarrolladores se suscriben a un producto que
contiene esa API y después pueden llamar a la operación de la API cumpliendo cualquier directiva de uso que
pueda estar en vigor. Entre los escenarios habituales se incluyen los siguientes:
Protección de la infraestructura móvil mediante el control de acceso con claves de API, la prevención de
ataques de denegación de servicio mediante la limitación o el uso de directivas de seguridad avanzadas como
la validación de tokens JWT.
Habilitación de los ecosistemas de asociados de fabricantes de software independiente mediante la
oferta de una incorporación rápida de asociados a través del portal para desarrolladores y la creación de una
fachada de API para desacoplar desde implementaciones internas que no son adecuada para el consumo de
los asociados.
Ejecución de un programa de API interno mediante la oferta de una ubicación centralizada para la
organización a fin de comunicar acerca de la disponibilidad y los últimos cambios en las API y el control de
acceso en función de cuentas de organizaciones, todo ello basado en un canal seguro entre la puerta de enlace
de la API y el back-end.
El sistema consta de los siguientes componentes:
La puerta de enlace de la API es el extremo que:
Acepta llamadas de API y las enruta a los back-end.
Comprueba las claves de API, los tokens JWT, los certificados y otras credenciales.
Aplica cuotas de uso y límites de frecuencia.
Transforma la API sobre la marcha sin modificaciones de código.
Almacena en caché las respuestas de back-end donde se instalaron.
Registra los metadatos de llamada para fines de análisis.
Azure Portal es la interfaz administrativa donde se configura el programa de API. Utilícelo para:
definir o importar el esquema de API
empaquetar las API en productos
establecer directivas, como cuotas o transformaciones, en las API
obtener información del análisis
administrar usuarios
El portal para desarrolladores actúa como la presencia web principal para desarrolladores, donde estos
pueden:
leer documentación de la API
probar una API a través de la consola interactiva
crear una cuenta y suscribirse para obtener claves de API
obtener acceso a análisis sobre su propio uso
Para más información, consulte las notas del producto en formato PDF Cloud-based API Management:
Harnessing the Power of APIs (API Management basado en la nube: aprovechamiento de la versatilidad de las
API. Estas notas del producto introductorias sobre la administración de API por CITO Research cubren:
Desafíos y requisitos comunes de API
Desacoplamiento de API y presentación de fachadas
Puesta en marcha de los desarrolladores rápidamente
Protección de acceso
Análisis y métricas
Obtención de control e información con una plataforma de API Management
Uso de soluciones de nube frente a locales
Azure API Management
API y operaciones
Las API son el fundamento de una instancia del servicio Administración de API. Cada API representa un conjunto
de operaciones disponibles para los desarrolladores. Cada API contiene una referencia a un servicio back-end que
implementa la API y sus operaciones se asignan a las operaciones implementadas por dicho servicio. Las
operaciones de API Management son altamente configurables, con control sobre asignación de direcciones URL,
parámetros de consulta y ruta de acceso, contenidos de solicitudes y respuestas y almacenamiento en caché de
respuestas de operaciones. En la API o en el ámbito de operación individual, también se pueden implementar
directivas de límite de tasa, cuotas y restricción de direcciones IP.
Para más información, consulte Creación de API e Incorporación de operaciones a una API.
Productos
Los productos son la forma de presentar las API a los desarrolladores. Los productos en Administración de API
tienen una o varias API y se configuran con un título, una descripción y términos de uso. Los productos pueden
ser de tipo Abierto o Protegido. Para poder usar los productos protegidos es necesario suscribirse antes a ellos,
mientras que los productos abiertos pueden usarse sin suscripción. Cuando un producto está preparado para que
lo usen los desarrolladores, se puede publicar. Una vez publicado, los desarrolladores pueden verlo (y, en el caso
de los productos protegidos, suscribirse a él). La aprobación de la suscripción se configura en el ámbito de
producto y puede requerir la aprobación del administrador o aprobarse automáticamente.
Los grupos se usan para administrar la visibilidad de productos a los desarrolladores. Los productos conceden
visibilidad a los grupos y los desarrolladores pueden ver los productos visibles a los grupos a los que pertenecen y
suscribirse a ellos.
Grupos
Los grupos se usan para administrar la visibilidad de productos a los desarrolladores. API Management tiene los
siguientes grupos invariables del sistema:
Administradores : los administradores de la suscripción de Azure son miembros de este grupo. Los
administradores controlan las instancias del servicio Administración de API y crean las API, las operaciones y
los productos que usan los desarrolladores.
Desarrolladores : los usuarios del portal para desarrolladores autenticados se incluyen en este grupo. Los
desarrolladores son los clientes que compilan aplicaciones con sus API. Los desarrolladores, después de que se
les concede acceso al portal para desarrolladores, crean aplicaciones que llaman a las operaciones de una API.
Invitados : a este grupo pertenecen los usuarios del portal para desarrolladores no autenticados como, por
ejemplo, clientes potenciales que visitan el portal para desarrolladores de una instancia de API Management.
Se les concede determinado acceso de solo lectura, como por ejemplo la posibilidad de ver API pero no
llamarlas.
Además de estos grupos del sistema, los administradores pueden crear grupos personalizados o aprovechar los
grupos externos en inquilinos de Azure Active Directory asociados. Los grupos personalizados y externos pueden
usarse junto con grupos del sistema en la concesión a los desarrolladores de visibilidad y acceso a productos de la
API. Por ejemplo, podría crear un grupo personalizado para los desarrolladores afiliados a una organización
asociada específica y permitirles el acceso a las API a partir de un producto que contenga solo las API relevantes.
Un usuario puede ser miembro de más de un grupo.
Para más información, consulte Creación y uso de grupos.
Desarrolladores
Los desarrolladores representan las cuentas de usuario de una instancia del servicio API Management. Los
desarrolladores pueden ser creados por administradores o invitados por estos y también pueden suscribirse
desde el Portal para desarrolladores. Cada desarrollador es miembro de uno o varios grupos y se puede suscribir
a los productos que conceden visibilidad a esos grupos.
Cuando los desarrolladores se suscriben a un producto, se les concede la clave principal y secundaria para dicho
producto. Esta clave se usa cuando se realizan llamadas en las API del producto.
Para más información, consulte Creación o invitación de desarrolladores y Asociación de grupos a
desarrolladores.
Directivas
Las directivas son una eficaz funcionalidad de API Management que permite a Azure Portal cambiar el
comportamiento de la API a través de la configuración. Las directivas son una colección de declaraciones que se
ejecutan secuencialmente en la solicitud o respuesta de una API. Entre las declaraciones más usadas se
encuentran la conversión de formato de XML a JSON y la limitación de tasa de llamadas para restringir el número
de llamadas entrantes de un desarrollador, pero también hay muchas otras directivas disponibles.
Las expresiones de directiva pueden utilizarse como valores de atributos o valores de texto en cualquiera de las
directivas de API Management, a menos que la directiva especifique lo contrario. Algunas directivas como Flujo
de control y Establecer variable se basan en expresiones de directiva. Para más información, consulte Directivas
avanzadas y Expresiones de directiva.
Para obtener una lista completa de las directivas de API Management, consulte Referencia de la directiva. Para
más información acerca del uso y la configuración de directivas, consulte Directivas de API Management. Para ver
un tutorial sobre la creación de un producto con directivas de cuota y límite de tasas, consulte Creación y
definición de configuraciones de productos avanzadas.
Pasos siguientes
Complete la guía de inicio rápido siguiente y empiece a usar Azure API Management:
Creación de una instancia de Azure API Management
Comparación de características de los planes de tarifa
de Azure API Management
23/07/2019 • 2 minutes to read • Edit Online
Cada plan de tarifa de API Management ofrece un conjunto diferente de características y capacidad por unidad. En
la tabla siguiente se resumen las características clave disponibles en cada uno de los planes. Algunas características
podrían funcionar de manera diferente o tener funcionalidades diferentes según el plan. En tales casos, se indican
las diferencias en los artículos de documentación que describen estas características individuales.
Compatibilidad Sin Sí No No Sí
con redes
virtuales (VNet)
Implementación Sin No No No Sí
en varias
regiones
Múltiples Sin No No No Sí
nombres de
dominio
personalizados
Configuración de Sí Sí Sí Sí Sí
SSL
Caché externa Sí Sí Sí Sí Sí
Autenticación de Sí Sí Sí Sí Sí
certificados de
clientes
Copia de Sin Sí Sí Sí Sí
seguridad y
restauración
Administración a Sin Sí Sí Sí Sí
través de Git
CARACTERÍSTICA CONSUMO DEVELOPER BÁSICA ESTÁNDAR PREMIUM
API de Sin Sí Sí Sí Sí
administración
directa
Métricas y Sin Sí Sí Sí Sí
registros de
Azure Monitor
IP estática Sin Sí Sí Sí Sí
1 Habilita el uso de Azure AD (y Azure AD B2C ) como proveedor de identidades para el inicio de sesión del usuario
en el portal para desarrolladores.
2 Incluye funciones relacionadas, por ejemplo, plantillas y notificaciones de usuarios, grupos, problemas,
Azure API Management (APIM ) ayuda a las organizaciones a publicar API para desarrolladores
externos, asociados e internos a fin de desbloquear el potencial de sus datos y servicios. API
Management proporciona las competencias esenciales para garantizar un programa de API de éxito
mediante compromisos con desarrolladores, información detallada empresarial, análisis, seguridad y
protección. APIM le permite crear y administrar modernas puertas de enlace de API para los servicios
back-end existentes hospedados en cualquier lugar. Para más información, consulte el tema de
introducción.
Esta guía de inicio rápido describe los pasos que deben seguirse para crear una nueva instancia de API
Management mediante Azure Portal.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
3. Seleccione Create.
TIP
Normalmente, se tarda entre 20 y 30 minutos en crear el servicio API Management. Si selecciona Anclar
al panel, podrá encontrar el servicio que acaba de crear con más facilidad.
TIP
Para agregar API Management a los favoritos en Azure Portal, seleccione la estrella.
Limpieza de recursos
Cuando ya no los necesite, puede quitar el grupo de recursos y todos los recursos relacionados
siguiendo los pasos a continuación:
1. En Azure Portal, seleccione Todos los servicios.
2. Escriba resource groups en el cuadro de búsqueda y haga clic en el resultado.
3. Encuentre el grupo de recursos y haga clic en él.
4. Haga clic en Eliminar grupo de recursos.
Pasos siguientes
Importación y publicación de la primera API
Creación de una nueva instancia del servicio Azure
API Management
30/07/2019 • 5 minutes to read • Edit Online
Azure API Management (APIM ) ayuda a las organizaciones a publicar API para desarrolladores externos,
asociados e internos a fin de desbloquear el potencial de sus datos y servicios. API Management proporciona las
competencias esenciales para garantizar un programa de API de éxito mediante compromisos con desarrolladores,
información detallada empresarial, análisis, seguridad y protección. APIM le permite crear y administrar modernas
puertas de enlace de API para los servicios back-end existentes hospedados en cualquier lugar. Para obtener más
información, consulte el tema de introducción.
En este inicio rápido se describen los pasos que deben seguirse para crear una nueva instancia de API
Management mediante scripts de PowerShell. El inicio rápido muestra cómo utilizar el servicio Azure Cloud Shell
que puede ejecutar desde Azure Portal.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.
Limpieza de recursos
Cuando ya no se necesiten, puede usar el comando Remove-AzResourceGroup para quitar el grupo de recursos y
todos los recursos relacionados.
Pasos siguientes
Importación y publicación de la primera API
Importación y publicación de la primera API
23/07/2019 • 9 minutes to read • Edit Online
En este tutorial se explica cómo importar una API de back-end de Especificación OpenAPI que reside en
https://conferenceapi.azurewebsites.net?format=json. Esta API de back-end la proporciona Microsoft y se
hospeda en Azure.
Una vez que la API de back-end se importa en Management API (APIM ), la API de APIM se convierte en una
fachada de la API de back-end. En el momento en que se importa la API de back-end, el origen de la API y la
API de APIM son idénticos. APIM permite personalizar la fachada según sus necesidades sin tocar la API de
back-end. Para obtener más información, consulte Transformación y protección de una API.
En este tutorial, aprenderá a:
Importación de la primera API
Prueba de la API en Azure Portal
Pruebe la API en el Portal para desarrolladores
Requisitos previos
Conocer la terminología de API Management de Azure.
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
TIP
Para agregar API Management a los favoritos en Azure Portal, seleccione la estrella.
NOTE
Para publicar la API, debe asociarla a un producto. Puede hacerlo desde la página de configuración.
3. Seleccione Crear.
TIP
Si surgen problemas con la importación de su propia definición de API, consulte la lista de problemas y restricciones
conocidos.
Prueba de la nueva API APIM en Azure Portal
Se puede llamar a las operaciones directamente desde Azure Portal, lo que proporciona una forma cómoda de
ver y probar las operaciones de una API.
1. Seleccione la API que ha creado en los pasos anteriores (desde la pestaña API ).
2. Presione la pestaña Prueba.
3. Haga clic en GetSpeakers. En la página se muestran los campos de los parámetros de consulta, que, en
este caso, no tiene ninguno, y los encabezados. Uno de los encabezados es "Ocp-Apim-Suscripción-
Key", para la clave de suscripción del producto que está asociado a esta API. La clave se rellena
automáticamente.
4. Presione Enviar.
Back-end responde con 200 Aceptar y algunos datos.
Pasos siguientes
En este tutorial aprendió lo siguiente:
Importación de la primera API
Prueba de la API en Azure Portal
Pruebe la API en el Portal para desarrolladores
Avance hasta el siguiente tutorial:
Creación y publicación de un producto
Crear y publicar un producto
25/05/2018 • 6 minutes to read • Edit Online
En Azure API Management, un producto contiene una o varias API, así como una cuota de uso y los términos de
uso. Una vez publicado un producto, los desarrolladores pueden suscribirse al producto y comenzar a usar las API
del producto.
En este tutorial, aprenderá a:
Crear y publicar un producto
Agregar una API al producto
Requisitos previos
Conocer la terminología de API Management de Azure.
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Además, realice el siguiente tutorial: Importación y publicación de la primera API.
NOMBRE DESCRIPCIÓN
Nombre para mostrar El nombre que desea que aparezca en el portal para
desarrolladores.
Términos legales Puede incluir los términos de uso del producto que deben
aceptar los suscriptores para usarlo.
TIP
Puede crear o actualizar la suscripción del usuario para un producto con claves de suscripción personalizadas mediante la API
REST o un comando de PowerShell.
Pasos siguientes
En este tutorial aprendió lo siguiente:
Crear y publicar un producto
Agregar una API al producto
Avance hasta el siguiente tutorial:
Create blank API and mock API responses (Creación de una API en blanco y simulación de respuestas de API)
Simulación de respuestas de API
23/07/2019 • 7 minutes to read • Edit Online
Pueden importarse API de back-end en una API de APIM, o bien crearse o administrarse manualmente. Los
pasos descritos en este tutorial muestran cómo usar APIM para crear una API en blanco y administrarla de forma
manual. El tutorial muestra cómo establecer una directiva en una API para que devuelva una respuesta simulada.
Este método permite a los desarrolladores continuar con la implementación y las pruebas de la instancia de APIM
en caso de que el back-end no esté disponible para enviar respuestas reales. La funcionalidad de simular
respuestas puede resultar útil en una serie de escenarios:
Cuando la fachada de API se ha diseñado primero y la implementación de back-end se realiza más tarde. El
back-end se está desarrollando en paralelo.
Cuando el back-end no está temporalmente operativo o no se puede escalar.
En este tutorial, aprenderá a:
Creación de una API de prueba
Adición de una operación a la API de prueba
Habilitación de la simulación de respuesta
Probar la API simulada
Requisitos previos
Conocer la terminología de API Management de Azure.
Comprender el concepto de directivas en API Management de Azure.
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
URL (verbo HTTP) GET Puede elegir uno de los verbos HTTP
predefinidos.
Pestaña Respuesta Consulte los pasos que figuran abajo Defina esquemas, ejemplos, tipos de
de esta tabla. contenido y códigos de estado de
respuesta.
3. Seleccione la pestaña Respuesta, que se encuentra bajo los campos URL, Nombre para mostrar y
Descripción.
4. Haga clic en + Agregar respuesta.
5. Seleccione 200 OK en la lista.
6. En el encabezado Representaciones de la derecha, seleccione + Agregar representación.
7. Escriba "application/json" en el cuadro de búsqueda y seleccione el tipo de contenido application/json.
8. En el cuadro de texto Ejemplo, escriba { 'sampleField' : 'test' } .
9. Seleccione Crear.
6. En el cuadro de texto API Management response (Respuesta de API Management), escriba 200 OK,
application/json. Esta selección indica que la API debe devolver la respuesta de ejemplo que definió en la
sección anterior.
7. Haga clic en Save(Guardar).
TIP
Una barra amarilla con el texto La simulación de respuesta está habilitada indica que las respuestas devueltas
desde API Management envían una directiva de simulación y no una respuesta de back-end real.
Vídeo
Pasos siguientes
En este tutorial aprendió lo siguiente:
Creación de una API de prueba
Adición de una operación a la API de prueba
Habilitación de la simulación de respuesta
Probar la API simulada
Avance hasta el siguiente tutorial:
Transformación y protección de una API publicada
Transformación y protección de una API
23/07/2019 • 10 minutes to read • Edit Online
El tutorial muestra cómo puede transformar una API para que no revele información privada del back-end. Por
ejemplo, recomendamos ocultar la información sobre la pila de tecnología que se ejecuta en el back-end, así
como las URL originales que aparecen en el cuerpo de la respuesta HTTP de la API y, en su lugar, redirigirlas a
la puerta de enlace de APIM.
Este tutorial muestra lo fácil que es agregar protección para la API de back-end configurando el límite de
frecuencia con Azure API Management. Por ejemplo, puede que quiera limitar un número de llamadas a la API
para que los desarrolladores no la sobreutilicen. Para obtener más información, consulte Directivas de
administración de API.
En este tutorial, aprenderá a:
Transformación una API para eliminar encabezados de respuesta
Reemplazo de URL originales en el cuerpo de la respuesta de API con las URL de puerta de enlace de
APIM
Protección de una API agregando la directiva de límite de frecuencia (limitación)
Prueba de las transformaciones
Requisitos previos
Conocer la terminología de API Management de Azure.
Comprender el concepto de directivas en API Management de Azure.
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Además, realice el siguiente tutorial: Importación y publicación de la primera API.
TIP
Para agregar API Management a los favoritos en Azure Portal, seleccione la estrella.
En el resto de esta sección se prueban transformaciones de directiva que estableció en este artículo.
Prueba de los encabezados de respuesta eliminados
1. Seleccione Demo Conference API (API de conferencia de demostración).
2. Seleccione la pestaña Prueba.
3. Haga clic en la operación GetSpeakers.
4. Presione Enviar.
Como puede ver, los encabezados se han eliminado:
Vídeo
Pasos siguientes
En este tutorial aprendió lo siguiente:
Transformación una API para eliminar encabezados de respuesta
Reemplazo de URL originales en el cuerpo de la respuesta de API con las URL de puerta de enlace de
APIM
Protección de una API agregando la directiva de límite de frecuencia (limitación)
Prueba de las transformaciones
Avance hasta el siguiente tutorial:
Supervisión de una API
Supervisión de las API publicadas
23/07/2019 • 13 minutes to read • Edit Online
Con Azure Monitor, puede visualizar, consultar, enrutar, archivar y realizar acciones en las métricas o los registros
procedentes de los recursos de Azure.
En este tutorial, aprenderá a:
Visualización de registros de actividad
Visualización de los registros de diagnóstico
Visualización de las métricas de las API
Configurar una regla de alerta cuando la API recibe llamadas no autorizadas
En el vídeo siguiente se muestra cómo supervisar API Management con Azure Monitor.
Requisitos previos
Conocer la terminología de API Management de Azure.
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Además, realice el siguiente tutorial: Importación y publicación de la primera API.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
2. En la lista desplegable, seleccione las métricas que le interesen. Por ejemplo, Solicitudes de puerta de
enlace correctas. También puede agregar más métricas al gráfico.
3. El gráfico muestra el número total de llamadas API correctas.
6. En la vista Configurar lógica de señal, especifique un umbral después del cual debe activarse la alerta y
haga clic en Hecho.
7. Seleccione un grupo de acciones existente o cree uno nuevo. En el ejemplo siguiente, se enviará un correo
electrónico a los administradores.
8. Escriba un nombre y la descripción para la regla de alertas y elija el nivel de gravedad.
9. Presione Crear regla de alertas.
10. Ahora, intente llamar a Conference API sin una clave de API. La alerta se desencadenará y se enviará un
correo electrónico a los administradores.
Registros de actividad
Los registros de actividad proporcionan información sobre las operaciones llevadas a cabo en los servicios API
Management. Con los registros de actividades, puede determinar los interrogantes “qué, quién y cuándo” de las
operaciones de escritura (PUT, POST, DELETE ) llevadas a cabo en los servicios API Management.
NOTE
Los registros de actividad no incluyen las operaciones de lectura (GET) ni las realizadas en Azure Portal o mediante las API de
administración originales.
Puede acceder a registros de actividad en el servicio API Management o a los registros de todos los recursos de
Azure en Azure Monitor.
Para ver los registros de actividad:
1. Seleccione la instancia del servicio APIM.
2. Haga clic en Registro de actividad.
Registros de diagnóstico
Los registros de diagnóstico proporcionan información valiosa acerca de las operaciones y los errores que son
importantes para la auditoría, así como para solucionar problemas. Los registros de diagnóstico son diferentes de
los registros de actividad. Los registros de actividad proporcionan información sobre las operaciones llevadas a
cabo en los recursos de Azure. Los registros de diagnóstico proporcionan información detallada acerca de las
operaciones que el recurso ha realizado.
Para configurar registros de diagnóstico:
1. Seleccione la instancia del servicio APIM.
2. Haga clic en Configuración de diagnóstico.
3. Haga clic en Activar diagnóstico. Los registros de diagnóstico se pueden archivar junto con las métricas
en una cuenta de almacenamiento, transmitirlos en secuencias a un centro de eventos o enviarlos a los
registros de Azure Monitor.
Actualmente, API Management proporciona registros de diagnóstico (de los que se crean lotes cada hora) de una
solicitud de API individual con cada entrada que tenga el esquema siguiente:
{
"isRequestSuccess" : "",
"time": "",
"operationName": "",
"category": "",
"durationMs": ,
"callerIpAddress": "",
"correlationId": "",
"location": "",
"httpStatusCodeCategory": "",
"resourceId": "",
"properties": {
"method": "",
"url": "",
"clientProtocol": "",
"responseCode": ,
"backendMethod": "",
"backendUrl": "",
"backendResponseCode": ,
"backendProtocol": "",
"requestSize": ,
"responseSize": ,
"cache": "",
"cacheTime": "",
"backendTime": ,
"clientTime": ,
"apiId": "",
"operationId": "",
"productId": "",
"userId": "",
"apimSubscriptionId": "",
"backendId": "",
"lastError": {
"elapsed" : "",
"source" : "",
"scope" : "",
"section" : "" ,
"reason" : "",
"message" : ""
}
}
}
PROPIEDAD ESCRIBA DESCRIPCIÓN
Pasos siguientes
En este tutorial aprendió lo siguiente:
Visualización de registros de actividad
Visualización de los registros de diagnóstico
Visualización de las métricas de las API
Configurar una regla de alerta cuando la API recibe llamadas no autorizadas
Avance hasta el siguiente tutorial:
Seguimiento de llamadas
Depuración de las API con el seguimiento de
solicitudes
25/05/2018 • 2 minutes to read • Edit Online
Este tutorial describe cómo inspeccionar el procesamiento de solicitudes para ayudarle con la depuración y la
solución de problemas de una API.
En este tutorial, aprenderá a:
Realizar el seguimiento de una llamada
Requisitos previos
Conocer la terminología de API Management de Azure.
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Además, realice el siguiente tutorial: Importación y publicación de la primera API.
NOTE
Si Ocp-Apim-Subscription-Key no se rellena automáticamente, puede recuperar el valor del Portal para
desarrolladores y exponer las claves en la página de perfil.
TIP
Cada paso muestra también el tiempo transcurrido desde que API Management recibe la solicitud.
Pasos siguientes
En este tutorial aprendió lo siguiente:
Realizar el seguimiento de una llamada
Avance hasta el siguiente tutorial:
Uso de revisiones
Uso de revisiones para realizar cambios que no
producen interrupciones de forma segura
23/07/2019 • 5 minutes to read • Edit Online
Cuando la API esté lista y los desarrolladores empiecen a usarla, tendrá que realizar cambios en dicha API y, al
mismo tiempo, no interrumpir a quienes la llaman. También resulta útil informar a los desarrolladores de los
cambios realizados. Esto se logra en Azure API Management con las revisiones. Para más información, consulte
Versions & revisions (Versiones y revisiones) y API Versioning with Azure API Management (Control de versiones
con Azure API Management).
En este tutorial, aprenderá a:
Agregar una nueva revisión
Realizar cambios que no producen interrupciones en la revisión
Convertir la revisión en actual y agregar una entrada en el registro de cambios
Examinar el portal para desarrolladores para ver los cambios y registro de cambios
Requisitos previos
Conocer la terminología de API Management de Azure.
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Además, realice el siguiente tutorial: Importación y publicación de la primera API.
TIP
También puede seleccionar Agregar revisión en el menú contextual ( ... ) de la API.
5. Incluya una descripción de la nueva revisión que ayude a saber para qué va a servir.
6. Seleccione Crear
7. Ya tenemos creada la revisión.
NOTE
La API original permanece en Revisión 1. Esta es la revisión que los usuarios siguen llamando hasta que decida
convertir otra en actual.
TIP
Use el selector de revisión para alternar entre las revisiones con las que vaya a trabajar.
Pasos siguientes
En este tutorial aprendió lo siguiente:
Agregar una nueva revisión
Realizar cambios que no producen interrupciones en la revisión
Convertir la revisión en actual y agregar una entrada en el registro de cambios
Examinar el portal para desarrolladores para ver los cambios y registro de cambios
Avance hasta el siguiente tutorial:
Publicación de varias versiones de la API
Publicación de varias versiones de la API
23/07/2019 • 5 minutes to read • Edit Online
A veces resulta poco práctico que todos los que llaman a la API usen exactamente la misma versión. Si alguien
que llama a una API quiere actualizarla a una versión posterior, querrá hacerlo con un método que sea fácil de
comprender. Esto se puede hacer en Azure API Management con las versiones. Para más información, consulte
Versions & revisions (Versiones y revisiones).
En este tutorial, aprenderá a:
Agregar una nueva versión a una API existente
Elegir un esquema de versión
Agregar la versión a un producto
Examinar el portal para desarrolladores para ver la versión
Requisitos previos
Conocer la terminología de API Management de Azure.
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Además, realice el siguiente tutorial: Importación y publicación de la primera API.
TIP
Las versiones también se pueden habilitar al crear una API desde cero (para ello, seleccione ¿Definir versión de esta API?
en la pantalla Agregar API).
TIP
Si selecciona encabezado o cadena de consulta como esquema de control de versiones, debe proporcionar un
valor más: el nombre del parámetro de encabezado o de cadena de consulta.
NOTE
Si agrega una versión a una API sin control de versiones, se creará automáticamente un Original (que responde a la
dirección URL predeterminada). Esto garantiza que quienes estén llamando en ese momento no sufran ninguna
interrupción a causa del proceso de adición de la versión. Si crea una API con las versiones habilitadas desde el
principio, no se creará un original.
6. Ahora puede modificar y configurar v1 como una API independiente de Original. Los cambios en una
versión no afectan a otra.
Existen tres maneras comunes de personalizar el portal para desarrolladores en Azure API Management:
Editar el contenido de las páginas estáticas y los elementos de diseño de página
Actualizar los estilos usados en los elementos de página en el portal para desarrolladores (que se explica en
esta guía)
Modificar las plantillas usadas en las páginas generadas por el portal (por ejemplo, documentos de API,
productos, autenticación de usuario)
En este tutorial, aprenderá a:
Personalizar el estilo de los elementos de las páginas del portal para desarrolladores
Ver el cambio
Requisitos previos
Conocer la terminología de API Management de Azure.
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Además, realice el siguiente tutorial: Importación y publicación de la primera API.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
8. Seleccione Publicar en la parte inferior izquierda del menú del panel de personalización.
9. Seleccione Publish customizations (Publicar personalizaciones) para que los cambios estén disponibles
públicamente.
Ver el cambio
1. Desplácese hasta el portal para desarrolladores.
2. Puede ver el cambio que ha realizado.
Pasos siguientes
En este tutorial aprendió lo siguiente:
Personalizar el estilo de los elementos de las páginas del portal para desarrolladores
Ver el cambio
También podría estar interesado en aprender cómo personalizar el portal para desarrolladores para Azure API
Management mediante plantillas.
Ejemplos de directivas de API Management
23/07/2019 • 4 minutes to read • Edit Online
Las directivas constituyen una funcionalidad del sistema eficaz que permite al editor cambiar el comportamiento
de la API mediante la configuración. Las directivas son una colección de declaraciones que se ejecutan
secuencialmente en la solicitud o respuesta de una API. En la tabla siguiente se incluyen vínculos a ejemplos y
una breve descripción de cada ejemplo.
Directivas de entrada
Incorporación de un encabezado de reenviado para permitir Muestra cómo agregar un encabezado de reenviado a la
que la API de back-end cree direcciones URL correctas solicitud de entrada para permitir que la API de back-end
cree direcciones URL correctas.
Incorporación de un encabezado con un identificador de Muestra cómo agregar un encabezado con un identificador
correlación de correlación para la solicitud de entrada.
Incorporación de funcionalidades a un servicio back-end y Muestra cómo agregar funcionalidades a un servicio back-
almacenamiento de la respuesta en caché end. Por ejemplo, aceptar el nombre de un lugar en vez de su
latitud y longitud en una API de pronóstico meteorológico.
Autorización de acceso con notificaciones JWT Muestra cómo autorizar el acceso a los métodos HTTP
específicos en una API con notificaciones JWT.
Autorización de solicitudes mediante un autorizador externo Muestra cómo utilizar un autorizador externo para proteger
el acceso de una API.
Autorización de acceso con el token de OAuth de Google Muestra cómo autorizar el acceso a los puntos de conexión
con Google como proveedor de tokens de OAuth.
Generación de la firma de acceso compartido y reenvío de la Muestra cómo generar una firma de acceso compartido
solicitud a Azure Storage mediante expresiones y reenviar la solicitud a Azure Storage
con la directiva de reescritura del identificador URI.
Obtención del token de acceso de OAuth2 desde AAD y Proporciona un ejemplo de uso de OAuth2 para la
reenvío al back-end autorización entre la puerta de enlace y un back-end.
Muestra cómo obtener un token de acceso en AAD y
reenviarlo al back-end.
Obtención del token de X-CSRF en la puerta de enlace de Muestra cómo implementar el patrón X-CSRF que utilizan
SAP mediante la directiva de solicitud de envío muchas API. En este ejemplo es específico de la puerta de
enlace de SAP.
Enrutamiento de la solicitud en función del tamaño de su Muestra cómo enrutar las solicitudes en función del tamaño
cuerpo de su cuerpo.
Envío de información contextual de la solicitud al servicio de Muestra cómo enviar información contextual al servicio de
back-end back-end para el registro o el procesamiento.
Establecimiento de la duración en caché de las respuestas Muestra cómo establecer la duración en caché de las
respuestas con el valor maxAge en el encabezado de control
de caché que envía el back-end.
Directivas de salida
Filtrado del contenido de la respuesta Muestra cómo filtrar los elementos de datos de la carga de
respuesta según el producto asociado a la solicitud.
Directivas de errores
Registro de errores en Stackify Muestra cómo agregar una directiva de registro de errores
para enviarlos a Stackify para el registro.
Ejemplos de Azure PowerShell para API Management
23/07/2019 • 2 minutes to read • Edit Online
En la tabla siguiente hay scripts de ejemplo para trabajar con el servicio de API Management desde PowerShell.
Aprovisionamiento y administración
Definición de API
Protección
Protección
Configuración de la directiva de límite de velocidad Aplica el límite de velocidad para la directiva en el nivel de
producto.
Terminología
23/07/2019 • 3 minutes to read • Edit Online
Este artículo proporciona definiciones para los términos que son específicos de API Management (APIM ).
Definiciones de términos
API de back-end: servicio HTTP que implementa la API y sus operaciones.
API de front-end/API APIM: una API de APIM no hospeda las API, crea fachadas para las API con el fin
de personalizarlas según sus necesidades sin tocar la API de back-end. Para obtener más información,
consulte Importación y publicación de la primera API.
Producto de APIM producto que contiene una o varias API, así como una cuota de uso y los términos de
uso. Puede incluir varias API y ofrecerlas a los desarrolladores mediante el Portal para desarrolladores.
Para obtener más información, consulte Creación y publicación de un producto.
Operación de API de APIM: cada API representa un conjunto de operaciones disponibles para los
desarrolladores. Cada API de APIM contiene una referencia a un servicio back-end que implementa la API
y sus operaciones se asignan a las operaciones implementadas por dicho servicio. Para obtener más
información, consulte Simulación de respuestas de API.
Versión: habrá quienes quieran publicar características de la API nuevas o diferentes para algunos
usuarios, mientras que otros preferirán quedarse con la API que actualmente les vale. Para obtener más
información, consulte Publicación de varias versiones de la API.
Revisión: cuando la API esté lista y los desarrolladores empiecen a usarla, normalmente hay que tener
cuidado al realizar cambios en dicha API y, al mismo, tiempo, no interrumpir a quienes la llaman. También
resulta útil informar a los desarrolladores de los cambios realizados. Para obtener más información,
consulte el artículo sobre el uso de revisiones.
Portal para desarrolladores de: los clientes (programadores) deben usar el Portal para desarrolladores
para acceder a las API. Se puede personalizar el Portal para desarrolladores. Para obtener más
información, consulte cómo personalizar el Portal para desarrolladores.
Pasos siguientes
Creación de una instancia
Directivas de Azure API Management
25/05/2018 • 7 minutes to read • Edit Online
En Azure API Management (APIM ), las directivas constituyen una eficaz funcionalidad del sistema que permite
al editor cambiar el comportamiento de la API mediante la configuración. Las directivas son una colección de
declaraciones que se ejecutan secuencialmente en la solicitud o respuesta de una API. Entre las declaraciones
más usadas se encuentran la conversión de formato de XML a JSON y la limitación de tasa de llamadas para
restringir la cantidad de llamadas entrantes de un desarrollador. Hay muchas más directivas disponibles y listas
para usar.
Las directivas se aplican en la puerta de enlace que se encuentra entre el consumidor de la API y la API
administrada. La puerta de enlace recibe todas las solicitudes y normalmente las reenvía sin modificar a la API
subyacente. Sin embargo, una directiva puede aplicar cambios a la solicitud de entrada y a la respuesta de
salida.
Las expresiones de directiva pueden utilizarse como valores de atributos o valores de texto en cualquiera de las
directivas de API Management, a menos que la directiva especifique lo contrario. Algunas directivas como
Flujo de control y Establecer variable se basan en expresiones de directiva. Para obtener más información,
consulte Directivas avanzadas y Expresiones de directiva.
NOTE
Si la directiva que desea agregar no está habilitada, asegúrese de que se encuentra en el ámbito correcto para esa
directiva. Cada instrucción de la directiva está diseñada para su uso en determinados ámbitos y secciones de la directiva.
Para revisar las secciones y los ámbitos de una directiva, compruebe la sección de uso de esa directiva en la referencia de
directivas.
Si se produce un error durante el procesamiento de una solicitud, los pasos restantes de las secciones inbound ,
backend o outbound se omiten y la ejecución salta a las instrucciones de la sección on-error . Mediante la
colocación de instrucciones de directiva en la sección on-error puede revisar el error con la propiedad
context.LastError , inspeccionar y personalizar la respuesta de error con la directiva set-body y configurar lo
que ocurre si se produce un error. Existen códigos de error para pasos integrados y errores que pueden
producirse durante el procesamiento de las instrucciones de directiva. Para más información, consulte Control
de errores en las directivas de administración de API.
Configuración de directivas
Para información sobre cómo configurar directivas, consulte el artículo sobre edición o establecimiento de
directivas.
Ejemplos de directivas
Vea ejemplos de directivas para obtener más código de ejemplo.
Ejemplos
Aplicación de las directivas especificadas en distintos ámbitos
Si tiene una directiva de nivel global y una directiva configurada para una API, cuando se use esa API en
concreto, se aplicarán ambas directivas. Administración de API tiene en cuenta el orden determinista de
declaraciones de directiva combinadas mediante el elemento base.
<policies>
<inbound>
<cross-domain />
<base />
<find-and-replace from="xyz" to="abc" />
</inbound>
</policies>
En la definición de directiva del ejemplo anterior, la instrucción cross-domain se ejecutaría antes de las
directivas superiores que, a su vez, irían seguidas de la directiva find-and-replace .
Restricción de las solicitudes de entrada
Para agregar una nueva instrucción a fin de restringir las solicitudes de entrada a direcciones IP concretas, sitúe
el cursor exactamente dentro del contenido del elemento XLM inbound y haga clic en la instrucción Restrict
caller IPs (Restringir las IP del autor de llamada).
Así, se agregará un fragmento de código XML al elemento inbound que ofrece orientación sobre cómo
configurar la instrucción.
Para limitar las solicitudes de entrada y aceptar solo las procedentes de una dirección IP de 1.2.3.4, modifique
el XML de la manera siguiente:
<ip-filter action="allow">
<address>1.2.3.4</address>
</ip-filter>
Pasos siguientes
Para obtener más información sobre cómo trabajar con directivas, consulte:
API de transformación
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su
configuración
Ejemplos de directivas
Directivas de administración de API
24/07/2019 • 9 minutes to read • Edit Online
En esta sección se proporciona una referencia para las siguientes directivas de API Management. Para obtener
más información sobre cómo agregar y configurar directivas, consulte Directivas en Administración de API.
Las directivas constituyen una eficaz funcionalidad del sistema que permite al publicador cambiar el
comportamiento de la API a través de la configuración. Las directivas son una colección de declaraciones que se
ejecutan secuencialmente en la solicitud o respuesta de una API. Entre las declaraciones más usadas se
encuentran la conversión de formato de XML a JSON y la limitación de tasa de llamadas para restringir la
cantidad de llamadas entrantes de un desarrollador. Hay muchas más directivas disponibles y listas para usar.
Las expresiones de directiva pueden utilizarse como valores de atributos o valores de texto en cualquiera de las
directivas de API Management, a menos que la directiva especifique lo contrario. Algunas directivas como Flujo
de control y Establecer variable se basan en expresiones de directiva. Para más información, consulte Directivas
avanzadas y Expresiones de directiva.
Directivas
Directivas de restricción de acceso
Activar encabezado HTTP : aplica la existencia o el valor de un encabezado HTTP.
Limitar la frecuencia de llamadas por suscripción : evita los picos de uso de la API limitando la
frecuencia de llamadas, por suscripción.
Limitar la frecuencia de llamadas por clave : evita los picos de uso de la API limitando la frecuencia de
llamadas, por clave.
Restringir IP de autor de llamada : filtra (permite/deniega) las llamadas de direcciones IP específicas o
de intervalos de direcciones.
Establecer cuota de uso por suscripción : le permite aplicar un volumen de llamadas renovables o
permanentes o una cuota de ancho de banda por suscripción.
Establecer cuota de uso por clave : le permite aplicar un volumen de llamadas renovables o
permanentes o una cuota de ancho de banda por clave.
Validar JWT : aplica la existencia y la validez de un JWT extraído de un encabezado HTTP especificado o
un parámetro de consulta especificado.
Directivas avanzadas
Flujo de control: aplica condicionalmente instrucciones de directiva basadas en la evaluación de
expresiones booleanas.
Reenviar solicitud : reenvía la solicitud al servicio back-end.
Limitar la simultaneidad: evita que las directivas delimitadas las ejecute simultáneamente un número de
solicitudes mayor que el especificado.
Log to Event Hub (Registrar en el centro de eventos): envía mensajes en el formato especificado a un
destino de mensaje definido por una entidad del registrador.
Mock response (Simular respuesta): anula la ejecución de la canalización y devuelve la respuesta ficticia
directamente al llamador.
Reintentar : reintenta ejecutar las instrucciones de directiva adjuntas, si y hasta que se cumple la
condición. La ejecución se repite en los intervalos de tiempo especificados y hasta el número de
reintentos indicado.
Devolver respuesta : anula la ejecución de la canalización y devuelve la respuesta especificada
directamente al llamador.
Enviar solicitud unidireccional : envía una solicitud a la dirección URL especificada sin esperar una
respuesta.
Enviar solicitud : envía una solicitud a la dirección URL especificada.
Establecer el proxy HTTP: permite enrutar las solicitudes reenviadas a través de un proxy HTTP.
Set variable (Establecer variable): conserva un valor en una variable de contexto con nombre para el
acceso posterior.
Establecer método de solicitud : le permite cambiar el método HTTP de una solicitud.
Establecimiento de código de estado: cambia el código de estado HTTP al valor especificado.
Seguimiento: agrega una cadena a la salida de API Inspector.
Wait (Esperar): espera a que se completen las directivas adjuntas Send request (Enviar solicitud), Get
value from cache (Obtener el valor de caché) o Control flow (Flujo de control) antes de continuar.
Directivas de autenticación
Autenticar con opción básica : autenticar con un servicio de back-end mediante la autenticación básica.
Autenticar con certificado de cliente : autenticar con un servicio de back-end mediante certificados de
cliente.
Autenticar con identidad administrada: autenticar con un servicio de back-end mediante una identidad
administrada.
Caching policies
Obtener de caché : realiza una búsqueda en caché y devuelve una respuesta en caché válida cuando esté
disponible.
Almacenar en caché : almacena en caché la respuesta de acuerdo con la configuración de control de
caché especificada.
Obtener valor de caché : recupere un elemento almacenado en caché por clave.
Almacenar valor en caché : almacene un elemento en la memoria caché por clave.
Quitar valor de caché ; quita un elemento de la memoria caché por clave.
Directivas entre dominios
Permitir llamadas entre dominios : permite que la API sea accesible desde los clientes basados en
explorador de Adobe Flash y Microsoft Silverlight.
CORS : agrega soporte de uso compartido de recursos entre orígenes (CORS ) a una operación o a una
API para permitir llamadas entre dominios desde clientes basados en explorador.
JSONP : agrega JSON con soporte de relleno (JSONP ) a una operación o a una API para permitir
llamadas entre dominios desde clientes basados en explorador de JavaScript.
Directivas de transformación
Convertir JSON a XML : convierte el cuerpo de solicitud o respuesta de JSON a XML.
Convertir XML a JSON : convierte el cuerpo de solicitud o respuesta de XML a JSON.
Buscar y reemplazar la cadena en el cuerpo : encuentra una subcadena de solicitud o de respuesta y la
reemplaza por una subcadena diferente.
Enmascarar URL en el contenido : reescribe (enmascara) vínculos en el cuerpo de respuesta para que
apunten al vínculo equivalente a través de la puerta de enlace.
Establecer el servicio back-end : cambia el servicio back-end para una solicitud entrante.
Establecer cuerpo -establece el cuerpo del mensaje para las solicitudes entrantes y salientes.
Establecer encabezado HTTP : asigna un valor a un encabezado de respuesta o de solicitud existente o
agrega un nuevo encabezado de este tipo.
Establecer el parámetro de cadena de consulta : agrega, reemplaza el valor o elimina el parámetro de la
cadena de consulta de la solicitud.
URL de reescritura : convierte una URL de solicitud de su forma pública a la forma esperada por el
servicio web.
Transform XML using an XSLT (Transformar XML mediante una XSLT): aplica una transformación de
XSL al XML del cuerpo de la solicitud o respuesta.
Pasos siguientes
Para obtener más información sobre cómo trabajar con directivas, consulte:
Directivas de Azure API Management
API de transformación
Ejemplos de directivas
Suscripciones en Azure API Management
25/07/2019 • 5 minutes to read • Edit Online
Las suscripciones son un concepto importante en Azure API Management. Son la forma más habitual para los
consumidores de obtener acceso a las API publicadas mediante una instancia de API Management. En este
artículo se proporciona información general del concepto.
TIP
API Management también admite otros mecanismos para proteger el acceso a las API, por ejemplo:
OAuth2.0
Certificados de cliente
Lista de direcciones IP permitidas
Pasos siguientes
Para más información sobre API Management:
Aprenda otros conceptos en API Management.
Siga nuestros tutoriales para más información sobre API Management.
Consulte nuestra página de preguntas frecuentes para ver las preguntas habituales.
Administración de Azure API Management mediante
Azure Automation
25/05/2018 • 2 minutes to read • Edit Online
Esta guía presenta el servicio Azure Automation y cómo se puede usar para simplificar la administración de Azure
API Management.
Pasos siguientes
Ahora que ha aprendido los aspectos básicos de Azure Automation y cómo se puede usar para administrar Azure
API Management, siga estos vínculos para obtener más información.
Consulte el tutorial de introducción de Azure Automation.
Control de errores en las directivas de API
Management
23/07/2019 • 10 minutes to read • Edit Online
Azure API Management proporciona un objeto ProxyError que permite a los publicadores responder a las
condiciones de error que se pueden producir durante el procesamiento de solicitudes. Para acceder al objeto
ProxyError se usa la propiedad context.LastError. Este objeto se puede usar en las directivas de la sección de
directivas on-error . En este tema se proporciona una referencia a las funcionalidades de control de errores de
Azure API Management.
<policies>
<inbound>
<!-- statements to be applied to the request go here -->
</inbound>
<backend>
<!-- statements to be applied before the request is
forwarded to the backend service go here -->
</backend>
<outbound>
<!-- statements to be applied to the response go here -->
</outbound>
<on-error>
<!-- statements to be applied if there is an error
condition go here -->
</on-error>
</policies>
Durante el procesamiento de una solicitud, se ejecutan pasos integrados junto con las directivas que están en el
ámbito de la solicitud. Si se produce un error, el procesamiento salta inmediatamente a la sección de directivas
on-error .
La sección de directivas on-error se puede utilizar en cualquier ámbito. Los publicadores de API pueden
configurar comportamientos predeterminados, como registrar el error en los centros de eventos o crear una nueva
respuesta para devolver al autor de la llamada.
NOTE
La sección on-error no está presente en las directivas de forma predeterminada. Para agregar la sección on-error a una
directiva, vaya a la directiva deseada en el editor de directivas y agréguela. Para más información sobre cómo configurar
directivas, consulte Directivas en API Management.
Si no hay ninguna sección on-error , los autores de la llamada recibirán mensajes de respuesta HTTP 400 o 500 si se
produce una condición de error.
lastError
Cuando se produce un error y el control salta a la sección de directivas on-error , el error se almacena en la
propiedad context.LastError a la que pueden acceder las directivas de la sección on-error . LastError tiene las
siguientes propiedades:
NOTE
Todas las directivas tienen un atributo id opcional que se pude agregar al elemento raíz de la directiva. Si este atributo está
presente en una directiva cuando se produce una condición de error, el valor del atributo se puede recuperar mediante la
propiedad context.LastError.PolicyId .
Ejemplo
Establecer una directiva de API en:
<policies>
<inbound>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<set-header name="ErrorSource" exists-action="override">
<value>@(context.LastError.Source)</value>
</set-header>
<set-header name="ErrorReason" exists-action="override">
<value>@(context.LastError.Reason)</value>
</set-header>
<set-header name="ErrorMessage" exists-action="override">
<value>@(context.LastError.Message)</value>
</set-header>
<set-header name="ErrorScope" exists-action="override">
<value>@(context.LastError.Scope)</value>
</set-header>
<set-header name="ErrorSection" exists-action="override">
<value>@(context.LastError.Section)</value>
</set-header>
<set-header name="ErrorPath" exists-action="override">
<value>@(context.LastError.Path)</value>
</set-header>
<set-header name="ErrorPolicyId" exists-action="override">
<value>@(context.LastError.PolicyId)</value>
</set-header>
<set-header name="ErrorStatusCode" exists-action="override">
<value>@(context.Response.StatusCode.ToString())</value>
</set-header>
<base />
</on-error>
</policies>
Pasos siguientes
Para obtener más información sobre cómo trabajar con directivas, consulte:
Directivas de Azure API Management
API de transformación
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su configuración
Ejemplos de directivas
Restricciones de importación de API y problemas
conocidos
23/07/2019 • 5 minutes to read • Edit Online
OpenAPI/Swagger
Si recibe errores al importar el documento de OpenAPI, asegúrese de haberlo validado con antelación. Para ello,
use el diseñador en Azure Portal (Diseño - Front-End - OpenAPI Specification Editor [Editor de especificaciones
de OpenAPI]) o con una herramienta de terceros como Swagger Editor.
General
Los parámetros necesarios en la ruta de acceso y en la consulta deben tener nombres únicos. (En OpenAPI,
un nombre de parámetro solo debe ser único dentro de una ubicación; por ejemplo, ruta de acceso, consulta,
encabezado. Pero en API Management se permite que los parámetros tanto de la ruta de acceso como de la
consulta [que OpenAPI no admite] discriminen las operaciones. Por eso es necesario que los nombres de los
parámetros sean únicos en toda la plantilla de la dirección URL ).
Los punteros de $$ref no pueden hacer referencia a archivos externos.
x-ms-paths y x-servers son las únicas extensiones admitidas.
Las extensiones personalizadas se omiten durante la importación y no se guardan ni conservan para la
exportación.
Recursión: API Management no es compatible con definiciones establecidas de forma recursiva (por
ejemplo, esquemas que hacen referencia a sí mismos).
La dirección URL (si está disponible) del archivo de origen se aplica a direcciones URL del servidor relativas.
OpenAPI versión 2
Solo se admite el formato JSON.
OpenAPI versión 3
Si se especifican muchos servidores, API Management tratará de seleccionar la primera dirección URL
HTTPS. Si no hay ninguna dirección URL HTTPS: la primera dirección URL HTTP. Si no hay ninguna
dirección URL HTTP: la dirección URL del servidor estará vacía.
Ejemplos no se admite, pero ejemplo sí.
Multipart/form -data no se admite.
IMPORTANT
Consulte este documento para obtener información importante y consejos relacionados con la importación de OpenAPI.
WSDL
Los archivos WSDL se usan para crear API de paso a través de SOAP y de SOAP a REST.
Enlaces SOAP: solo se admiten los enlaces SOAP cuya codificación es de tipo "documento" o "literal". No se
admiten las codificaciones de estilo "rpc" o SOAP.
WSDL:Import: no se admite este atributo. Los clientes deben combinar las importaciones en un único
documento.
Mensajes con varias partes: en la actualidad no se admiten estos tipos de mensajes.
WCF wsHttpBinding: los servicios SOAP creados con Windows Communication Foundation deben usar
basicHttpBinding. No se admite el uso de wsHttpBinding.
MTOM: los servicios que usan MTOM podrían funcionar. No se ofrece soporte técnico oficial en este
momento.
Recursión: APIM no admite los tipos que se definen de modo recursivo (por ejemplo, hacen referencia a una
matriz formada por ellos mismos).
Varios espacios de nombres: en un esquema se pueden usar varios espacios de nombres, pero el único que
se puede usar para definir las partes del mensaje es el de destino. Los espacios de nombres que se usen para
definir otros elementos de entrada o salidas, y que no sean el destino, no se conservan. Aunque se puede
importar un documento WSDL, en la exportación todas las partes del mensaje tendrá el espacio de nombres
de destino de WSDL.
Matrices: la transformación de SOAP a REST admite solo las matrices encapsuladas que se muestran en el
siguiente ejemplo:
<complexType name="arrayTypeName">
<sequence>
<element name="arrayElementValue" type="arrayElementType" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="typeName">
<sequence>
<element name="element1" type="someTypeName" minOccurs="1" maxOccurs="1"/>
<element name="element2" type="someOtherTypeName" minOccurs="0" maxOccurs="1" nillable="true"/>
<element name="arrayElement" type="arrayTypeName" minOccurs="1" maxOccurs="1"/>
</sequence>
</complexType>
WADL
Actualmente, no hay ningún problema de importación conocido de WADL.
Atributos de seguridad para la administración de API
24/07/2019 • 5 minutes to read • Edit Online
Prevención
ATRIBUTO DE SEGURIDAD SÍ/NO NOTAS
Cifrado en reposo: Sí (solo para el cifrado del servicio) Los datos confidenciales, como
Cifrado del servidor certificados, claves y valores con
Cifrado del servidor con claves nombre secreto se cifran con
administradas por el cliente administradas del servicio, por las claves
Otras características de cifrado de la instancia de servicio.
(por ejemplo, del cliente, siempre
cifrado, etc.)
Control de claves de cifrado (CMK, No Todas las claves de cifrado son por
BYOK, etcetera.) instancia de servicio y servicio
administrado.
Segmentación de red
ATRIBUTO DE SEGURIDAD SÍ/NO NOTAS
Detección
ATRIBUTO DE SEGURIDAD SÍ/NO NOTAS
Authentication Sí
Autorización Sí
Pista de auditoría
ATRIBUTO DE SEGURIDAD SÍ/NO NOTAS
Administración de configuración
ATRIBUTO DE SEGURIDAD SÍ/NO NOTAS
VULNERABILIDAD DESCRIPCIÓN
En los pasos de este artículo se explica cómo usar Azure Portal para agregar manualmente una API a la instancia
de API Management (APIM ). Un escenario común es si quiere crear una API en blanco y definirla manualmente
cuando desee simular la API. Para obtener más información sobre la simulación de una API, consulte el artículo
sobre cómo simular respuestas de API.
Si desea importar una API existente, consulte la sección de temas relacionados.
En este artículo, creará una API en blanco y especificará httpbin.org (un servicio de prueba público) como API de
back-end.
Requisitos previos
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management
5. Seleccione Crear.
En este momento, no tiene ninguna operación en APIM que se asigne a las operaciones en la API de back-end. Si
se llama a una operación que se expone a través del back-end, pero no a través de la APIM, obtendrá una
respuesta 404.
NOTE
De forma predeterminada, cuando agrega una API, aunque esté conectado a algún servicio back-end, APIM no expondrá
ninguna operación hasta que incorpore a la lista blanca. Para incluir en la lista blanca una operación del servicio de back-end,
cree una operación de APIM que se asigne a la operación de back-end.
Para anexar una API diferente a la API existente, complete los pasos siguientes. Al importar otra API, las
operaciones se anexan a la API actual.
1. Vaya a la instancia de Azure API Management en Azure Portal.
2. Seleccione API del menú de la izquierda.
3. Haga clic en ... junto a la API a la que desea anexar otra API.
4. Seleccione Importar en el menú desplegable.
5. Seleccione un servicio desde el que se va a importar una API.
Temas relacionados
Limitaciones de importación de API
Importación de una especificación OpenAPI
Importación de una API de SOAP
Importación de API de SOAP y conversión en REST
Importación de una aplicación de API
Importación de una aplicación de Azure Function App
Importación de una aplicación lógica de Azure.
Importación de un servicio Service Fabric
Edición de una API
Pasos siguientes
Transformación y protección de una API publicada
Importación de una especificación OpenAPI
24/07/2019 • 9 minutes to read • Edit Online
En este artículo se explica cómo importar una API de back-end de Especificación OpenAPI que reside en
https://conferenceapi.azurewebsites.net?format=json. Esta API de back-end la proporciona Microsoft y se
hospeda en Azure. El artículo también muestra cómo probar la API de APIM.
IMPORTANT
Consulte este documento para obtener información importante y consejos relacionados con la importación de OpenAPI.
Requisitos previos
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management
TIP
Para agregar API Management a los favoritos en Azure Portal, seleccione la estrella.
3. Especifique la configuración adecuada. Puede establecer los valores de API durante la creación. Como
alternativa, puede establecer algunos de ellos más adelante accediendo a la pestaña Configuración.
Si presiona Tab, algunos de los campos, o todos, se rellenan con la información del servicio de back-end
especificado.
Nombre para mostrar API de conferencia de demostración Si presiona la tecla Tab después de
(API de conferencia de demostración) escribir la dirección URL del servicio,
APIM rellenará este campo en
función de lo que aparece en el
JSON.
El nombre se muestra en el Portal
para desarrolladores.
4. Seleccione Crear.
NOTE
Las limitaciones de la importación de API se documentan en otro artículo.
Temas relacionados
Limitaciones de importación de API
Importación de una especificación OpenAPI
Importación de una API de SOAP
Importación de API de SOAP y conversión en REST
Importación de una aplicación de API
Importación de una aplicación de Azure Function App
Importación de una aplicación lógica de Azure.
Importación de un servicio Service Fabric
Edición de una API
Pasos siguientes
Transformación y protección de una API publicada
Importación de una API de SOAP
24/07/2019 • 7 minutes to read • Edit Online
Este artículo explica cómo importar una representación XML estándar de una API de SOAP. El artículo también
muestra cómo probar la API de APIM.
En este artículo, aprenderá a:
Importación de una API de SOAP
Prueba de la API en Azure Portal
Pruebe la API en el Portal para desarrolladores
Requisitos previos
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management
5. Presione Tab.
Los siguientes campos se rellenan con la información de la API de SOAP: Nombre para mostrar, Nombre y
Descripción.
6. Agregue un sufijo URL de API. El sufijo es un nombre que identifica esta API concreta en esta instancia de
APIM. Debe ser exclusivo en esta instancia de APIM.
7. Publique la API asociándola a un producto. En este caso, se usa el producto "Unlimited". Si desea que la
API se publique y esté disponible para los desarrolladores, agréguela a un producto. Puede hacerlo
durante la creación de la API o configurarla más adelante.
Los productos son asociaciones de una o varias API. Puede incluir varias API y ofrecerlas a los
desarrolladores mediante el portal para desarrolladores. En primer lugar, los desarrolladores deben
suscribirse a un producto para acceder a la API. Al suscribirse, obtienen una clave de suscripción que
funciona con cualquier API de ese producto. Si creó la instancia de APIM, ya es un administrador, así que,
de forma predeterminada, está suscrito a todos los productos.
De forma predeterminada, cada instancia de API Management incluye dos productos de ejemplo:
Starter
Sin límite
8. Seleccione Crear.
Prueba de la nueva API de APIM en el portal de administración
Se puede llamar a las operaciones directamente desde el portal administrativo para desarrolladores, lo que
proporciona una forma cómoda de ver y probar las operaciones de una API.
1. Seleccione la API que creó en los pasos anteriores.
2. Presione la pestaña Prueba.
3. Seleccione alguna operación.
La página muestra los campos de parámetros de consulta y los campos para los encabezados. Uno de los
encabezados es "Ocp-Apim-Suscripción-Key", para la clave de suscripción del producto que está asociado
a esta API. Si ha creado la instancia APIM, ya es administrador, por lo que la clave se rellena
automáticamente.
4. Presione Enviar.
Back-end responde con 200 Aceptar y algunos datos.
Llamada a una operación desde el portal para desarrolladores
También se pueden llamar a las operaciones desde portal para desarrolladores para probar las API.
1. Seleccione la API que creó en el paso "Importación y publicación de una API de back-end".
2. Presione Portal para desarrolladores.
Se abre el sitio "Portal para desarrolladores".
3. Seleccione la API que ha creado.
4. Haga clic en la operación que desea probar.
5. Presione Try it (Probarlo).
6. Presione Enviar.
Después de invocar una operación, el portal para desarrolladores mostrará el estado de respuesta, los
encabezados de respuesta y el contenido de respuesta.
Para anexar una API diferente a la API existente, complete los pasos siguientes. Al importar otra API, las
operaciones se anexan a la API actual.
1. Vaya a la instancia de Azure API Management en Azure Portal.
2. Seleccione API del menú de la izquierda.
3. Haga clic en ... junto a la API a la que desea anexar otra API.
4. Seleccione Importar en el menú desplegable.
5. Seleccione un servicio desde el que se va a importar una API.
Temas relacionados
Limitaciones de importación de API
Importación de una especificación OpenAPI
Importación de una API de SOAP
Importación de API de SOAP y conversión en REST
Importación de una aplicación de API
Importación de una aplicación de Azure Function App
Importación de una aplicación lógica de Azure.
Importación de un servicio Service Fabric
Edición de una API
Pasos siguientes
Transformación y protección de una API publicada
Importación de API de SOAP y conversión en REST
24/07/2019 • 7 minutes to read • Edit Online
Este artículo muestra cómo importar una API de SOAP y convertirla en REST. El artículo también muestra cómo
probar la API de APIM.
En este artículo, aprenderá a:
Importación de API de SOAP y conversión en REST
Prueba de la API en Azure Portal
Pruebe la API en el Portal para desarrolladores
Requisitos previos
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management
5. Presione Tab.
Los siguientes campos se rellenan con la información de la API de SOAP: Nombre para mostrar, Nombre
y Descripción.
6. Agregue un sufijo URL de API. El sufijo es un nombre que identifica esta API concreta en esta instancia de
APIM. Debe ser exclusivo en esta instancia de APIM.
7. Publique la API asociándola a un producto. En este caso, se usa el producto "Unlimited". Si desea que la
API se publique y esté disponible para los desarrolladores, agréguela a un producto. Puede hacerlo
durante la creación de la API o configurarla más adelante.
Los productos son asociaciones de una o varias API. Puede incluir varias API y ofrecerlas a los
desarrolladores mediante el portal para desarrolladores. En primer lugar, los desarrolladores deben
suscribirse a un producto para acceder a la API. Al suscribirse, obtienen una clave de suscripción que
funciona con cualquier API de ese producto. Si creó la instancia de APIM, ya es un administrador, así que,
de forma predeterminada, está suscrito a todos los productos.
De forma predeterminada, cada instancia de API Management incluye dos productos de ejemplo:
Starter
Sin límite
8. Seleccione Crear.
Para anexar una API diferente a la API existente, complete los pasos siguientes. Al importar otra API, las
operaciones se anexan a la API actual.
1. Vaya a la instancia de Azure API Management en Azure Portal.
2. Seleccione API del menú de la izquierda.
3. Haga clic en ... junto a la API a la que desea anexar otra API.
4. Seleccione Importar en el menú desplegable.
5. Seleccione un servicio desde el que se va a importar una API.
Temas relacionados
Limitaciones de importación de API
Importación de una especificación OpenAPI
Importación de una API de SOAP
Importación de API de SOAP y conversión en REST
Importación de una aplicación de API
Importación de una aplicación de Azure Function App
Importación de una aplicación lógica de Azure.
Importación de un servicio Service Fabric
Edición de una API
Pasos siguientes
Transformación y protección de una API publicada
Importación de una aplicación de API como API
24/07/2019 • 7 minutes to read • Edit Online
Este artículo muestra cómo importar una aplicación de API como una API. El artículo también muestra cómo
probar la API de APIM.
En este artículo, aprenderá a:
Importación de una aplicación de API como API
Prueba de la API en Azure Portal
Pruebe la API en el Portal para desarrolladores
Requisitos previos
Completar la guía de inicio rápido siguiente: Creación de una instancia de Azure API Management
Asegúrese de que hay una aplicación de API en su suscripción. Para más información, consulte la
Documentación de App Service.
Para anexar una API diferente a la API existente, complete los pasos siguientes. Al importar otra API, las
operaciones se anexan a la API actual.
1. Vaya a la instancia de Azure API Management en Azure Portal.
2. Seleccione API del menú de la izquierda.
3. Haga clic en ... junto a la API a la que desea anexar otra API.
4. Seleccione Importar en el menú desplegable.
5. Seleccione un servicio desde el que se va a importar una API.
Temas relacionados
Limitaciones de importación de API
Importación de una especificación OpenAPI
Importación de una API de SOAP
Importación de API de SOAP y conversión en REST
Importación de una aplicación de API
Importación de una aplicación de Azure Function App
Importación de una aplicación lógica de Azure.
Importación de un servicio Service Fabric
Edición de una API
Pasos siguientes
Transformación y protección de una API publicada
Importación de una instancia de Azure Function App
como API en Azure API Management
24/07/2019 • 10 minutes to read • Edit Online
Azure API Management admite la importación de instancias de Azure Function App como API nuevas o su
anexión a las API existentes. El proceso genera automáticamente una clave de host en Azure Function App que,
después, se asigna a un valor con nombre en Azure API Management.
En este artículo se explica cómo importar una instancia de Azure Function App como API en Azure API
Management. También se describe el proceso de realización de pruebas.
Aprenderá a:
Importar una instancia de Azure Function App como una API
Anexar una instancia de Azure Function App a una API
Ver la nueva clave de host de Azure Function App y el valor con nombre de Azure API Management
Prueba de la API en Azure Portal
Prueba de la API en el portal para desarrolladores
Requisitos previos
Complete la guía de inicio rápido Creación de una instancia de Azure API Management.
Asegúrese de que tiene una aplicación de Azure Functions en la suscripción. Para más información, consulte
Creación de una instancia de Azure Function App. Debe contener funciones con desencadenador HTTP y la
configuración del nivel de autorización debe establecerse en Anónimo o Función.
TIP
Para agregar API Management a los favoritos en Azure Portal, seleccione la estrella.
3. Haga clic en Examinar para seleccionar las funciones que se van a importar.
4. Haga clic en la sección Function App para elegir en la lista de instancias de Function App.
5. Busque la instancia de Function App de la que desea importar funciones, haga clic en ella y presione
Seleccionar.
6. Seleccione las funciones que desea importar y haga clic en Seleccionar.
NOTE
Solo se pueden importar funciones que se basen en desencadenador HTTP y que tengan la configuración del nivel
de autorización establecida en Anónimo o Función.
7. Cambie a la vista Completa y asigne el Producto a la nueva API. Si es necesario, edite otros campos que
se rellenan automáticamente.
8. Haga clic en Create(Crear).
5. Haga clic en la sección Function App para elegir en la lista de instancias de Function App.
6. Busque la instancia de Function App de la que desea importar funciones, haga clic en ella y presione
Seleccionar.
7. Seleccione las funciones que desea importar y haga clic en Seleccionar.
8. Haga clic en Import.
Autorización
La importación de una instancia de Azure Function App genera automáticamente:
una clave de host en la aplicación de función con el nombre apim-{nombre de instancia del servicio Azure API
Management}.
un valor con nombre dentro de la instancia de Azure API Management con el nombre {nombre de la instancia
de Azure Function App}-key, que contiene la clave de host creada.
En el caso de las API creadas después del 4 de abril de 2019, la clave de host se pasa en las solicitudes HTTP
desde API Management a la aplicación de función en un encabezado. Las API más antiguas pasan la clave de
host como un parámetro de consulta. Se puede cambiar este comportamiento mediante la PATCH Backend
llamada API REST en la entidad de back-end asociada con la aplicación de función.
WARNING
Si se quita o se cambia el valor de la clave de host de Azure Function App o el valor con nombre de Azure API
Management, se interrumpirá la comunicación entre los servicios. Los valores no se sincronizan automáticamente.
Si necesita rotar la clave de host, asegúrese de que también se modifica el valor con nombre de Azure API Management.
Temas relacionados
Limitaciones de importación de API
Importación de una especificación OpenAPI
Importación de una API de SOAP
Importación de API de SOAP y conversión en REST
Importación de una aplicación de API
Importación de una aplicación de Azure Function App
Importación de una aplicación lógica de Azure.
Importación de un servicio Service Fabric
Edición de una API
Pasos siguientes
Transformación y protección de una API publicada
Importación de una aplicación lógica como API
24/07/2019 • 7 minutes to read • Edit Online
Este artículo muestra cómo importar una aplicación lógica como una API. El artículo también muestra cómo
probar la API de APIM.
En este artículo, aprenderá a:
Importación de una aplicación lógica como API
Prueba de la API en Azure Portal
Pruebe la API en el Portal para desarrolladores
Requisitos previos
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management
Asegúrese de que hay alguna aplicación lógica en su suscripción que expone un punto de conexión HTTP.
Para más información, consulte el artículo acerca del desencadenamiento de flujos de trabajo con puntos de
conexión HTTP
3. Presione Examinar para ver la lista de aplicaciones Logic Apps a las que se puede llamar en su
suscripción.
4. Seleccione la aplicación. APIM busca el swagger asociado a la aplicación seleccionada, lo captura y lo
importa.
5. Agregue un sufijo URL de API. El sufijo es un nombre que identifica esta API concreta en esta instancia de
APIM. Debe ser exclusivo en esta instancia de APIM.
6. Publique la API asociándola a un producto. En este caso, se usa el producto "Unlimited". Si desea que la
API se publique y esté disponible para los desarrolladores, agréguela a un producto. Puede hacerlo
durante la creación de la API o configurarla más adelante.
Los productos son asociaciones de una o varias API. Puede incluir varias API y ofrecerlas a los
desarrolladores mediante el portal para desarrolladores. En primer lugar, los desarrolladores deben
suscribirse a un producto para acceder a la API. Al suscribirse, obtienen una clave de suscripción que
funciona con cualquier API de ese producto. Si creó la instancia de APIM, ya es un administrador, así que,
de forma predeterminada, está suscrito a todos los productos.
De forma predeterminada, cada instancia de API Management incluye dos productos de ejemplo:
Starter
Sin límite
7. Seleccione Crear.
Para anexar una API diferente a la API existente, complete los pasos siguientes. Al importar otra API, las
operaciones se anexan a la API actual.
1. Vaya a la instancia de Azure API Management en Azure Portal.
2. Seleccione API del menú de la izquierda.
3. Haga clic en ... junto a la API a la que desea anexar otra API.
4. Seleccione Importar en el menú desplegable.
5. Seleccione un servicio desde el que se va a importar una API.
NOTE
Cada aplicación lógica tiene una operación manual-invoke. Si desea que la API contenga varias aplicaciones lógicas, para
que no tenga colisión, debe cambiar el nombre de la función.
Temas relacionados
Limitaciones de importación de API
Importación de una especificación OpenAPI
Importación de una API de SOAP
Importación de API de SOAP y conversión en REST
Importación de una aplicación de API
Importación de una aplicación de Azure Function App
Importación de una aplicación lógica de Azure.
Importación de un servicio Service Fabric
Edición de una API
Pasos siguientes
Transformación y protección de una API publicada
Integrar API Management con Service Fabric en
Azure
29/07/2019 • 22 minutes to read • Edit Online
La implementación de Azure API Management con Service Fabric es un escenario avanzado. API Management es
útil cuando es necesario publicar API con un completo conjunto de reglas de enrutamiento para los servicios de
Service Fabric de back-end. Las aplicaciones en la nube normalmente necesitan una puerta de enlace front-end
para proporcionar un único punto de entrada para usuarios, dispositivos u otras aplicaciones. En Service Fabric, una
puerta de enlace puede ser cualquier servicio sin estado diseñado para la entrada de tráfico, como una aplicación
ASP.NET Core, Event Hubs, IoT Hub o Azure API Management.
En este artículo se muestra cómo configurar Azure API Management con Service Fabric para enrutar el tráfico a un
servicio de back-end de Service Fabric. Cuando haya terminado, habrá implementado API Management en una red
virtual y configurado una operación de API para enviar tráfico a servicios sin estado de back-end. Para más
información sobre escenarios de Azure API Management con Service Fabric, consulte el artículo de introducción.
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.
Disponibilidad
IMPORTANT
Esta característica ya está disponible en los niveles Premium y Developer de API Management debido a la compatibilidad
requerida con redes virtuales.
Requisitos previos
Antes de empezar:
Si no tiene ninguna suscripción a Azure, cree una cuenta gratuita
Instale Azure Powershell o la CLI de Azure.
Cree un clúster de Windows en un grupo de seguridad de red.
Si implementa un clúster de Windows, configure un entorno de desarrollo de Windows. Instale
Visual Studio 2019 y las cargas de trabajo de desarrollo Azure, desarrollo web y ASP.NET y desarrollo a
través de plataformas .NET Core. Después, configure un entorno de desarrollo .NET.
Topología de red
Ahora que tiene un clúster de Windows seguro en Azure, implemente API Management en la red virtual (VNET),
en la subred y en el grupo de seguridad de red diseñados para API Management. En este artículo la plantilla de
Resource Manager para API Management está preconfigurada para usar los nombres de la red virtual, la subred y
el grupo de seguridad de red que configuró en el tutorial del clúster de Windows. Asimismo, este artículo
implementa la siguiente topología en Azure, donde API Management y Service Fabric están en subredes de la
misma red virtual:
Connect-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId <guid>
az login
az account set --subscription <guid>
<Resources>
<Endpoints>
<Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" />
</Endpoints>
</Resources>
Al quitar el puerto permite que Service Fabric especificar un puerto dinámicamente desde el intervalo de
puertos de aplicación, puede abrir a través del grupo de seguridad de red en la plantilla de Cluster Resource
Manager, permitiendo el tráfico fluya a él desde API Management.
6. Presione F5 en Visual Studio para comprobar que la API web está disponible de manera local.
Abra Service Fabric Explorer y vaya a una instancia específica del servicio ASP.NET Core para ver la
dirección base donde escucha el servicio. Agregue /api/values a la dirección base y ábralo en un
explorador. Esto invoca el método Get en ValuesController en la plantilla de Web API. Devuelve la respuesta
predeterminada de la plantilla, una matriz JSON con dos cadenas:
["value1", "value2"]`
Este es el punto de conexión que debe exponer a través de API Management en Azure.
7. Por último, implemente la aplicación en el clúster en Azure. In Visual Studio, haga clic con el botón derecho
en el proyecto de la aplicación y seleccione Publicar. Proporcione el punto de conexión del clúster (por
ejemplo, mycluster.southcentralus.cloudapp.azure.com:19000 ) para implementar la aplicación en el clúster de
Service Fabric en Azure.
En el clúster de Service Fabric en Azure ahora se ejecutará un servicio sin estado ASP.NET Core denominado
fabric:/ApiApplication/WebApiService .
<policies>
<inbound>
<base/>
<set-backend-service
backend-id="servicefabric"
sf-service-instance-name="service-name"
sf-resolve-condition="@(context.LastError?.Reason == "BackendConnectionFailure")" />
</inbound>
<backend>
<base/>
</backend>
<outbound>
<base/>
</outbound>
</policies>
Para obtener un conjunto completo de los atributos de directiva de back-end de Service Fabric, consulte la
documentación de back-end de API Management
Definición de los parámetros e implementación de API Management
Rellene los siguientes parámetros vacíos en apim.parameters.json para la implementación.
. VALOR
apimInstanceName sf-apim
apimPublisherEmail [email protected]
apimSku Developer
serviceFabricCertificateName sfclustertutorialgroup320171031144217
certificatePassword q6D7nN%6ck@6
serviceFabricCertificateThumbprint C4C1E541AD512B8065280292A8BA6079C3F26F10
url_path /api/values
clusterHttpManagementEndpoint https://mysfcluster.southcentralus.cloudapp.azure.com:19080
$bytes = [System.IO.File]::ReadAllBytes("C:\mycertificates\sfclustertutorialgroup220171109113527.pfx");
$b64 = [System.Convert]::ToBase64String($bytes);
[System.Io.File]::WriteAllText("C:\mycertificates\sfclustertutorialgroup220171109113527.txt", $b64);
Use el siguiente script para implementar la plantilla de Resource Manager y los archivos de parámetros para API
Management:
$groupname = "sfclustertutorialgroup"
$clusterloc="southcentralus"
$templatepath="C:\clustertemplates"
ResourceGroupName="sfclustertutorialgroup"
az group deployment create --name ApiMgmtNetworkDeployment --resource-group $ResourceGroupName --template-file
network-apim.json --parameters @network-apim.parameters.json
Pruébelo
Ahora puede intentar enviar una solicitud al servicio back-end de Service Fabric a través de API Management
directamente desde Azure Portal.
1. En el servicio API Management, seleccione API.
2. En la API de Service Fabric App que creó en los pasos anteriores, seleccione la pestaña Prueba y, a
continuación, la operación Values.
3. Haga clic en el botón Enviar para enviar una solicitud de prueba al servicio de back-end. La respuesta HTTP
debe ser similar a la siguiente:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Vary: Origin
Ocp-Apim-Trace-Location:
https://apimgmtstodhwklpry2xgkdj.blob.core.windows.net/apiinspectorcontainer/PWSQOq_FCDjGcaI1rdMn8w2-2?
sv=2015-07-08&sr=b&sig=MhQhzk%2FEKzE5odlLXRjyVsgzltWGF8OkNzAKaf0B1P0%3D&se=2018-01-
28T01%3A04%3A44Z&sp=r&traceId=9f8f1892121e445ea1ae4d2bc8449ce4
["value1", "value2"]
Limpieza de recursos
Un clúster está formado por muchos otros recursos de Azure, además del propio recurso del clúster. La manera
más sencilla de eliminar el clúster y todos los recursos que consume es eliminar el grupo de recursos.
Inicie sesión en Azure y seleccione el identificador de suscripción con el que quiere quitar el clúster. Para encontrar
el identificador de suscripción, inicie sesión en Azure Portal. Eliminar el grupo de recursos y todos los recursos de
clúster mediante el cmdlet Remove-AzResourceGroup.
$ResourceGroupName = "sfclustertutorialgroup"
Remove-AzResourceGroup -Name $ResourceGroupName -Force
ResourceGroupName="sfclustertutorialgroup"
az group delete --name $ResourceGroupName
Pasos siguientes
Obtenga más información acerca de cómo usar API Management.
vice-fabric-scripts-and-templates/blob/master/templates/service-integration/network-apim.parameters.jsonn
Edición de una API
24/07/2019 • 2 minutes to read • Edit Online
Los pasos descritos en este tutorial muestran cómo usar API Management (APIM ) para editar una API.
Para hacerlo, puede agregar, eliminar, cambiar el nombre de las operaciones en la instancia de APIM.
Puede editar el swagger de la API.
Requisitos previos
Creación de una instancia de Azure API Management
Importación y publicación de la primera API
TIP
Para agregar API Management a los favoritos en Azure Portal, seleccione la estrella.
Temas relacionados
Limitaciones de importación de API
Importación de una especificación OpenAPI
Importación de una API de SOAP
Importación de API de SOAP y conversión en REST
Importación de una aplicación de API
Importación de una aplicación de Azure Function App
Importación de una aplicación lógica de Azure.
Importación de un servicio Service Fabric
Edición de una API
Pasos siguientes
Directivas de ejemplo de APIM Transformación y protección de una API publicada
Capacidad de una instancia de Azure API
Management
23/07/2019 • 7 minutes to read • Edit Online
La capacidad la métrica de Azure Monitor individual más importante para tomar decisiones informadas acerca
de si se debe escalar una instancia de API Management para acomodar más carga. Su construcción es compleja e
impone un comportamiento concreto.
En este artículo se explica lo que es la capacidad y su comportamiento. Muestra cómo acceder a la métrica de
capacidad en Azure Portal y sugiere cuándo hay que considerar la posibilidad de escalar o actualizar una
instancia de API Management.
Requisitos previos
Para seguir los pasos de este artículo, debe tener:
Una suscripción de Azure activa.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Una instancia de APIM. Para más información, vea Creación de una instancia de Azure API Management.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
¿Qué es la capacidad?
La capacidad es un indicador de la carga de una instancia de APIM. Refleja el uso de los recursos (CPU y
memoria) y las longitudes de cola de la red. El uso de la CPU y la memoria revela el consumo de recursos por
parte de:
Los servicios de APIM, como las acciones de administración o el procesamiento de solicitudes, lo que puede
incluir el reenvío de solicitudes o la ejecución de una directiva
Procesos seleccionados del sistema operativo, entre los que se incluyen los procesos que implican el costo de
los protocolos de enlace de SSL en las nuevas conexiones.
La capacidad total es un promedio de sus propios valores de cada unidad de una instancia de API Management.
IMPORTANT
La capacidad no es una medida directa del número de solicitudes que se procesan.
La capacidad también puede tener picos intermitentes o ser mayor que cero aunque no se procesen solicitudes.
Esto sucede debido a acciones específicas del sistema o de la plataforma, y no debe tenerse en cuenta al decidir si
se escala una instancia.
TIP
Para evitar interpretaciones incorrectas, siempre debe mirar el desglose de la métrica de capacidad por ubicación.
TIP
Puede configurar alertas para saber en qué momento se está quedando sin capacidad un servicio o utilizar la
funcionalidad de escalado automático de Azure Monitor para agregar automáticamente una unidad de Azure API
Management. La operación de escalado puede tardar unos 30 minutos, por lo que debe planear las reglas en
consecuencia.
Solo se permite el escalado de la ubicación maestra.
Pasos siguientes
Escalado o actualización de una instancia del servicio Azure API Management
Actualización y escalado de una instancia de Azure
API Management
23/07/2019 • 7 minutes to read • Edit Online
Para escalar una instancia de Azure API Management (APIM ) los clientes pueden agregar o eliminar unidades.
Una unidad se compone de recursos de Azure dedicados y tiene cierta capacidad de carga, que se expresa
mediante el número de llamadas API que se realizan cada mes. Dicho número no representa un límite de
llamadas, sino un valor de rendimiento máximo que permite el planeamiento de la capacidad aproximada. El
rendimiento y la latencia reales varían considerablemente en función de factores como el número y la tasa de
conexiones concurrentes, el tipo y número de directivas configuradas, los tamaños de las solicitudes y respuestas
y la latencia del back-end.
La capacidad y el precio de cada unidad dependen del nivel en que se encuentra la unidad. Puede elegir entre
cuatro niveles: Desarrollador, Básico, Estándar, Premium. Si necesita más capacidad para un servicio de un
nivel, debe agregar una unidad. Si el nivel que está seleccionado actualmente en la instancia de APIM no permite
agregar más unidades, deberá actualizar a un nivel superior.
El precio de cada unidad y las características disponibles (por ejemplo, la implementación en varias regiones)
dependen del nivel elegido para la instancia de APIM. En el artículo sobre los precios, se explican el precio por
unidad y las características que se obtienen en cada nivel.
NOTE
En este artículo sobre los precios, se indica el número aproximado de unidades que puede tener cada nivel. Para obtener
unos datos más exactos, deberá consultar un escenario que se ajuste a la realidad de sus API. Consulte el artículo Capacidad
de una instancia de Azure API Management.
Requisitos previos
Para seguir los pasos de este artículo, debe:
Tener una suscripción de Azure activa.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Tener una instancia de APIM. Para más información, vea Creación de una instancia de Azure API
Management.
Comprender el concepto de Capacidad de una instancia de Azure API Management.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Actualización y escalado
Puede elegir entre cuatro niveles: Desarrollador, Básico, Estándar y Premium. El nivel Desarrollador debe
utilizarse para evaluar el servicio; no debe emplearse para producción. El nivel Desarrollador no dispone de un
Acuerdo de Nivel de Servicio y no se puede escalar (no se pueden agregar o quitar unidades).
Los niveles de producción Básico, Estándar y Premium cuentan con un Acuerdo de Nivel de Servicio y se
pueden escalar. El nivel Básico es el más económico que cuenta con un contrato de nivel de servicio (SLA) y
puede escalarse hasta dos unidades. El nivel Estándar puede escalarse hasta cuatro unidades. Puede agregar
cualquier número de unidades en el nivel Premium.
El nivel Premium permite distribuir una instancia de Azure API Management individual entre cualquier número
de regiones de Azure. Inicialmente, cuando se crea un servicio Azure API Management, la instancia contiene una
sola unidad y reside en una única región de Azure. La región inicial se designa como región primaria. Pueden
agregarse otras regiones fácilmente. Cuando agregue una región, debe especificar el número de unidades que
desea asignar. Por ejemplo, puede tener una unidad en la región primaria y cinco unidades en otra región. Puede
adaptar el número de unidades al tráfico que tiene en cada región. Para más información, consulte
Implementación de una instancia del servicio Azure API Management en varias regiones de Azure.
Puede cambiar un nivel por otro superior o inferior. Tenga en cuenta que, si cambia a un nivel superior o inferior,
es posible que algunas características dejen de estar disponibles, como ocurre con las VNET o las
implementaciones en varias regiones cuando se pasa del nivel Premium al nivel Estándar o Básico.
NOTE
El proceso de actualización o escalado puede tardar entre 15 y 45 minutos en aplicarse. Recibirá una notificación cuando se
haya completado.
Pasos siguientes
Implementación de una instancia del servicio Azure API Management en varias regiones de Azure
Escalado automático de una instancia de servicio de Azure API Management
Escalado automático de una instancia de Azure API
Management
23/07/2019 • 8 minutes to read • Edit Online
Una instancia de servicio de Azure API Management puede escalarse de manera automática en función de un
conjunto de reglas. Este comportamiento se puede habilitar y configurar a través de Azure Monitor y solo se
admite en los niveles Estándar y Premium del servicio Azure API Management.
En este artículo se le guía por el proceso de configuración de escalado automático y sugiere una configuración
óptima de las reglas de escalado automático.
Requisitos previos
Para seguir los pasos de este artículo, debe:
Tener una suscripción de Azure activa.
Tener una instancia de Azure API Management. Para más información, vea Creación de una instancia de Azure
API Management.
Comprender el concepto de Capacidad de una instancia de Azure API Management.
Comprender el proceso de escalado manual de una instancia de Azure API Management, incluidas las
consecuencias de costos.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
3. Busque el servicio Azure API Management en función de los filtros en los menús desplegables.
4. Seleccione la instancia de servicio deseada de Azure API Management.
5. En la sección recién abierta, haga clic en el botón Habilitar escalado automático.
Criterios
Acción
Criterios
Acción
Pasos siguientes
Implementación de una instancia del servicio Azure API Management en varias regiones de Azure
Configurar un nombre de dominio personalizado
23/07/2019 • 10 minutes to read • Edit Online
Cuando se crea una instancia del servicio Azure API Management (APIM ), Azure le asigna el subdominio de
azure-api.net (por ejemplo, apim-service-name.azure-api.net ). Sin embargo, los puntos de conexión de APIM se
pueden exponer con su propio nombre de dominio personalizado, como contoso.com. En este tutorial se muestra
cómo asignar un nombre DNS personalizado existente a los puntos de conexión expuestos por una instancia de
API Management.
WARNING
Los clientes que deseen usar la asignación de certificados para mejorar la seguridad de sus aplicaciones deben usar un
nombre de dominio personalizado > y el certificado que administran, no el certificado predeterminado. Los clientes que
asignen el certificado predeterminado en su lugar tendrán > una gran dependencia de las propiedades del certificado que no
controlen, no siendo esto una práctica recomendada.
Requisitos previos
Para seguir los pasos que se describen en este artículo, debe tener:
Una suscripción de Azure activa.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Una instancia de API Management Para más información, vea Creación de una instancia de Azure API
Management.
Nombre de dominio personalizado que sea de su propiedad. El nombre de dominio personalizado que
desee usar debe adquirirse por separado y hospedarse en un servidor DNS. Este tema no contiene
instrucciones acerca de cómo hospedar un nombre de dominio personalizado.
Debe tener un certificado válido con una clave pública y privada (. PFX). El firmante o el nombre alternativo
del firmante (SAN ) debe coincidir con el nombre de dominio; de este modo, API Management puede
exponer de forma segura direcciones URL a través de SSL.
TIP
Se recomienda usar Azure Key Vault para administrar certificados y configurarlos para la rotación automática. Si usa
Azure Key Vault para administrar el certificado SSL de dominio personalizado, asegúrese de que el certificado se
inserta en Key Vault como un certificado, no como un secreto.
Para obtener un certificado SSL, API Management debe tener la lista de permisos y obtener los permisos de secretos
en la instancia de Key Vault que contiene el certificado. Cuando se usa Azure Portal, todos los pasos de configuración
necesarios se realizarán automáticamente. Cuando se usan las herramientas de línea de comandos o API
Management, estos permisos se deben conceder manualmente. Para ello, debe realizar dos pasos. En primer lugar,
use la página de identidades administradas de la instancia de API Management para asegurarse de que está
habilitada la identidad administrada, y anote el identificador de la entidad que se muestra en esa página. En segundo
lugar, proporcione la lista de permisos y obtenga los permisos de secretos de este identificador de entidad en la
instancia de Azure Key Vault que contiene el certificado.
Si el certificado está establecido para rotar automáticamente, API Management seleccionará automáticamente la
versión más reciente sin tiempo de inactividad para el servicio (si el plan de API Management tiene SLA en todos los
planes, excepto el plan de desarrollador).
NOTE
El proceso de asignación del certificado puede tardar unos 15 minutos o más según el tamaño de la implementación.
La SKU de desarrollador tiene un tiempo de inactividad, mientras que las SKU básica y superiores no.
Pasos siguientes
Actualización y escalado del servicio
Incorporación del almacenamiento en caché para
mejorar el rendimiento en Azure API Management
25/05/2018 • 4 minutes to read • Edit Online
En Administración de API, las operaciones se pueden configurar para el almacenamiento en caché de respuestas.
El almacenamiento en caché de respuestas puede reducir significativamente la latencia de la API, el consumo de
ancho de banda y la carga del servicio web en cuanto a datos que no cambian con frecuencia.
Para más información acerca del almacenamiento en caché, consulte Directivas de almacenamiento en caché de
API Management y Almacenamiento en caché personalizado en Azure API Management.
Disponibilidad
NOTE
La memoria caché interna no está disponible en el nivel Consumo de Azure API Management. Puede usar una instancia
externa de Azure Redis Cache en su lugar.
Requisitos previos
Para completar este tutorial:
Creación de una instancia de Azure API Management
Incorpore y publique una API
Adición de las directivas de almacenamiento en caché
Con las directivas de almacenamiento en caché que se muestran en este ejemplo, la primera solicitud de la
operación GetSpeakers devuelve una respuesta del servicio back-end. Dicha respuesta se almacena en la caché,
con una clave especificada mediante encabezados y parámetros de la cadena de consulta. Las siguientes llamadas
a la operación, con parámetros coincidentes, devolverán la respuesta almacenada en caché hasta que el intervalo
de duración en la caché haya expirado.
1. Inicie sesión en Azure Portal en https://portal.azure.com.
2. Vaya a la instancia de APIM.
3. Seleccione la pestaña API.
4. Haga clic en Demo Conference API (API de conferencia de demostración) en la lista de API.
5. Seleccione GetSpeakers.
6. En la parte superior de la pantalla, seleccione la pestaña Diseño.
7. En la sección Procesamiento de entrada, haga clic en el icono </> .
Duración especifica el intervalo de expiración de las respuestas almacenadas en caché. En este ejemplo, el
intervalo es 20 segundos.
TIP
Si usa una memoria caché externa, como se describe en Uso de una memoria caché de Redis externa en Azure API
Management, es posible que desee especificar el atributo caching-type de las directivas de almacenamiento en caché.
Consulte Directivas de almacenamiento en caché de API Management para más detalles.
Pasos siguientes
Para más información sobre las directivas de almacenamiento en caché, consulte Caching policies (Directivas
de almacenamiento en caché) en API Management policy reference (Referencia de la directiva de API
Management).
Para obtener información sobre el almacenamiento en caché de los elementos por parte de la clave mediante
expresiones de directiva, consulte Custom caching in Azure API Management.
Para más información sobre el uso de una instancia externa de Azure Redis Cache, consulte Uso de una
memoria caché de Redis externa en Azure API Management.
Uso de una instancia externa de Azure Redis Cache
en Azure API Management
23/07/2019 • 8 minutes to read • Edit Online
Además de utilizar la memoria caché integrada, Azure API Management permite también almacenar en caché
las respuestas en una instancia externa de Azure Redis Cache.
El uso de una memoria caché externa permite superar algunas limitaciones de la memoria caché integrada.
Resulta especialmente útil si desea:
Evitar que la memoria caché se borre periódicamente durante las actualizaciones de API Management
Tener más control sobre la configuración de la memoria caché
Almacenar en memoria caché más datos de los que permite el plan de API Management
Usar el almacenamiento en caché con el nivel de consumo de API Management
Para más información acerca del almacenamiento en caché, consulte Directivas de almacenamiento en caché de
API Management y Almacenamiento en caché personalizado en Azure API Management.
Requisitos previos
Para completar este tutorial, necesita:
Creación de una instancia de Azure API Management
Comprender el almacenamiento en memoria caché en Azure API Management
2. En New Azure Cache for Redis (Nueva instancia de Azure Redis Cache), configure la nueva caché.
Nombre DNS Nombre único globalmente El nombre de caché. Tiene que ser
una cadena de entre 1 y 63
caracteres y solo puede contener
números, letras y el carácter - . El
nombre de la memoria caché no
puede comenzar ni terminar por el
carácter - y no se pueden usar
varios caracteres - consecutivos.
Plan de tarifa C0 para básico (caché de 250 MB) El plan de tarifa determina el
tamaño, el rendimiento y las
características disponibles para la
memoria caché. Para más
información, consulte la introducción
a Azure Redis Cache.
NOTE
La configuración Utilizar desde especifica qué implementación regional de API Management se comunicará con la
memoria caché configurada en el caso de una configuración regional múltiple de API Management. Las memorias caché
especificadas como Predeterminada serán reemplazadas por las memorias caché con un valor regional.
Por ejemplo, si API Management está hospedado en las regiones Este de EE. UU., Sudeste Asiático y Europa Occidental y
hay dos memorias caché configuradas, una como Predeterminada y otra para Sudeste Asiático, la instancia de API
Management de Sudeste Asiático usará su propia memoria caché, mientras que las otras dos regiones utilizará la entrada
de caché Predeterminada.
Al publicar las API mediante Azure API Management, es sencillo y frecuente proteger el acceso a ellas mediante
claves de suscripción. Las aplicaciones cliente que necesiten usar las API publicadas deben incluir una clave de
suscripción válida en las solicitudes HTTP al realizar llamadas a esas API. Para obtener una clave de suscripción
para acceder a las API se necesita una suscripción. Para más información sobre las suscripciones, consulte
Suscripciones en Azure API Management.
Este artículo le guiará por los pasos necesarios para crear suscripciones en Azure Portal.
Requisitos previos
Para aprovechar los pasos de este artículo, los requisitos previos son los siguientes:
Crear una instancia de API Management.
Entender las suscripciones en API Management.
Después de crear la suscripción, se proporcionan dos claves para acceder a las API. Una clave es la principal y la
otra, la secundaria.
Pasos siguientes
Para más información sobre API Management:
Aprenda otros conceptos en API Management.
Siga nuestros tutoriales para más información sobre API Management.
Consulte nuestra página de preguntas frecuentes para ver las preguntas habituales.
Protección de API mediante la autenticación de
certificados de cliente en API Management
23/07/2019 • 4 minutes to read • Edit Online
API Management proporciona la capacidad de proteger el acceso a las API (es decir, de cliente a API
Management) mediante certificados de cliente. Puede validar el certificado entrante y comprobar las propiedades
del certificado con los valores deseados mediante expresiones de directiva.
Para obtener información acerca de cómo proteger el acceso al servicio back-end de una API mediante
certificados de cliente (es decir, API Management a back-end), vea cómo asegurar servicios back-end mediante el
cliente de autenticación de certificados
IMPORTANT
Para recibir y comprobar los certificados de cliente en el nivel de consumo debe activar "Certificado de cliente de solicitud"
establecer en la hoja "Dominios personalizados", tal como se muestra a continuación.
NOTE
Para deshabilitar el uso de lista de revocación de certificados comprobación
context.Request.Certificate.VerifyNoRevocation() en lugar de context.Request.Certificate.Verify() . Si el
certificado de cliente es un certificado autofirmado, raíz (o intermedia) deben ser certificados de CA cargado a la API de
administración de context.Request.Certificate.Verify() y context.Request.Certificate.VerifyNoRevocation()
funcione.
<choose>
<when condition="@(context.Request.Certificate == null || !context.Request.Certificate.Verify() ||
context.Request.Certificate.Thumbprint != "desired-thumbprint")" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>
NOTE
Para deshabilitar el uso de lista de revocación de certificados comprobación
context.Request.Certificate.VerifyNoRevocation() en lugar de context.Request.Certificate.Verify() . Si el
certificado de cliente es un certificado autofirmado, raíz (o intermedia) deben ser certificados de CA cargado a la API de
administración de context.Request.Certificate.Verify() y context.Request.Certificate.VerifyNoRevocation()
funcione.
<choose>
<when condition="@(context.Request.Certificate == null || !context.Request.Certificate.Verify() ||
!context.Deployment.Certificates.Any(c => c.Value.Thumbprint == context.Request.Certificate.Thumbprint))" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>
NOTE
Para deshabilitar el uso de lista de revocación de certificados comprobación
context.Request.Certificate.VerifyNoRevocation() en lugar de context.Request.Certificate.Verify() . Si el
certificado de cliente es un certificado autofirmado, raíz (o intermedia) deben ser certificados de CA cargado a la API de
administración de context.Request.Certificate.Verify() y context.Request.Certificate.VerifyNoRevocation()
funcione.
TIP
Problema de interbloqueo de certificado de cliente se describe en este artículo puede manifestarse de varias maneras, por
ejemplo, las solicitudes inmovilizar, el resultado de las solicitudes 403 Forbidden código de estado después de agotar el
tiempo, context.Request.Certificate es null . Este problema afecta a normalmente POST y PUT las solicitudes con la
longitud del contenido de aproximadamente 60 KB o superior. Para evitar este problema produzca habilite "Certificado de
cliente Negotiate" para los nombres de host deseado en la hoja "Dominios personalizados" tal como se muestra a
continuación. Esta característica no está disponible en el nivel de consumo.
Pasos siguientes
Cómo asegurar servicios back-end con la autenticación de certificados de cliente
¿Cómo se cargan certificados?
Protección de una API mediante OAuth 2.0 con
Azure Active Directory API Management
25/05/2018 • 15 minutes to read • Edit Online
En esta guía se muestra cómo configurar la instancia de Azure API Management para proteger una API mediante
el protocolo OAuth 2.0 con Azure Active Directory (Azure AD ).
Requisitos previos
Para seguir los pasos de este artículo, debe tener:
Una instancia de API Management
Una API que se vaya a publicar y que use la instancia de API Management
Un inquilino de Azure AD
Información general
Aquí se muestra una introducción rápida de los pasos:
1. Registre una aplicación (aplicación back-end) en Azure AD que represente la API.
2. Registre otra aplicación (aplicación cliente) en Azure AD que represente una aplicación de cliente que deba
llamar a la API.
3. En Azure AD, conceda permisos para que la aplicación cliente llame a la aplicación back-end.
4. Configure la consola del desarrollador para utilizar la autorización de usuario OAuth 2.0.
5. Agregue la directiva validate-jwt para validar el token de OAuth para todas las solicitudes entrantes.
NOTE
Si Azure Active Directory no aparece en los permisos para otras aplicaciones, haga clic en Agregar y agréguelo desde la
lista.
Ahora que ha configurado un servidor de autorización de OAuth 2.0, la consola del desarrollador puede obtener
tokens de acceso de Azure AD.
El paso siguiente consiste en habilitar la autorización de usuario de OAuth 2.0 para la API. Esto permite que la
consola del desarrollador sepa que debe obtener un token de acceso en nombre del usuario antes de realizar
llamadas a la API.
1. Vaya a la instancia de API Management y a API.
2. Seleccione la API que desea proteger. En este ejemplo, puede usar Echo API .
3. Vaya a Configuración.
4. En Seguridad, elija OAuth 2.0 y seleccione el servidor OAuth 2.0 que se configuró anteriormente.
5. Seleccione Guardar.
Ahora que la autorización de usuario OAuth 2.0 está habilitada en Echo API , la consola del desarrollador obtiene
un token de acceso para el usuario antes de llamar a la API.
1. Vaya a cualquier operación de Echo API en el portal para desarrolladores y, a continuación, seleccione
Probar. Aparecerá la consola del desarrollador.
2. Tenga en cuenta el nuevo elemento de la sección Autorización correspondiente al servidor de autorización
que acaba de agregar.
3. Seleccione Código de autorización de la lista desplegable de autorizaciones y se le pedirá que inicie
sesión en el inquilino de Azure AD. Si ya ha iniciado sesión con la cuenta, es posible que no se le indique
nada.
4. Al iniciar sesión correctamente, un encabezado Authorization se agregará a la solicitud con un token de
acceso de Azure AD. El siguiente es un token de ejemplo (con codificación Base64):
Authorization: Bearer
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlNTUWRoSTFjS3ZoUUVEU0p4RTJnR1lzNDBRMCIsImtpZCI6IlNTUWRoSTF
jS3ZoUUVEU0p4RTJnR1lzNDBRMCJ9.eyJhdWQiOiIxYzg2ZWVmNC1jMjZkLTRiNGUtODEzNy0wYjBiZTEyM2NhMGMiLCJpc3MiOiJod
HRwczovL3N0cy53aW5kb3dzLm5ldC80NDc4ODkyMC05Yjk3LTRmOGItODIwYS0yMTFiMTMzZDk1MzgvIiwiaWF0IjoxNTIxMTUyNjMz
LCJuYmYiOjE1MjExNTI2MzMsImV4cCI6MTUyMTE1NjUzMywiYWNyIjoiMSIsImFpbyI6IkFWUUFxLzhHQUFBQUptVzkzTFd6dVArcGF
4ZzJPeGE1cGp2V1NXV1ZSVnd1ZXZ5QU5yMlNkc0tkQmFWNnNjcHZsbUpmT1dDOThscUJJMDhXdlB6cDdlenpJdzJLai9MdWdXWWdydH
hkM1lmaDlYSGpXeFVaWk9JPSIsImFtciI6WyJyc2EiXSwiYXBwaWQiOiJhYTY5ODM1OC0yMWEzLTRhYTQtYjI3OC1mMzI2NTMzMDUzZ
TkiLCJhcHBpZGFjciI6IjEiLCJlbWFpbCI6Im1pamlhbmdAbWljcm9zb2Z0LmNvbSIsImZhbWlseV9uYW1lIjoiSmlhbmciLCJnaXZl
bl9uYW1lIjoiTWlhbyIsImlkcCI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDE
xZGI0Ny8iLCJpcGFkZHIiOiIxMzEuMTA3LjE3NC4xNDAiLCJuYW1lIjoiTWlhbyBKaWFuZyIsIm9pZCI6IjhiMTU4ZDEwLWVmZGItND
UxMS1iOTQzLTczOWZkYjMxNzAyZSIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6IkFGaWtvWFk1TEV1LTNkbk1pa3Z3M
UJzQUx4SGIybV9IaVJjaHVfSEM1aGciLCJ0aWQiOiI0NDc4ODkyMC05Yjk3LTRmOGItODIwYS0yMTFiMTMzZDk1MzgiLCJ1bmlxdWVf
bmFtZSI6Im1pamlhbmdAbWljcm9zb2Z0LmNvbSIsInV0aSI6ImFQaTJxOVZ6ODBXdHNsYjRBMzBCQUEiLCJ2ZXIiOiIxLjAifQ.agGf
aegYRnGj6DM_-
N_eYulnQdXHhrsus45QDuApirETDR2P2aMRxRioOCR2YVwn8pmpQ1LoAhddcYMWisrw_qhaQr0AYsDPWRtJ6x0hDk5teUgbix3gazb7
F-TVcC1gXpc9y7j77Ujxcq9z0r5lF65Y9bpNSefn9Te6GZYG7BgKEixqC4W6LqjtcjuOuW-
ouy6LSSox71Fj4Ni3zkGfxX1T_jiOvQTd6BBltSrShDm0bTMefoyX8oqfMEA2ziKjwvBFrOjO0uK4rJLgLYH4qvkR0bdF9etdstqKMo
5gecarWHNzWi_tghQu9aE3Z3EZdYNI_ZGM-Bbe3pkCfvEOyA
Pasos siguientes
Obtenga más información sobre Escenarios de autenticación para Azure AD.
Consulte más vídeos sobre la administración de API.
Para conocer otras formas de proteger el servicio back-end, consulte Autenticación de certificado mutua.
Creación de una instancia del servicio de API Management.
Administración de su primera API en Administración de API de Azure.
Usar Azure API Management con redes virtuales
29/07/2019 • 25 minutes to read • Edit Online
Azure Virtual Network (VNET) le permiten colocar cualquier recurso de Azure en una red que se pueda enrutar
distinta de Internet y a la que controla el acceso. Después, estas redes se pueden conectar a sus redes locales
mediante diversas tecnologías de VPN. Para más información sobre Azure Virtual Network, vea: Información
general sobre Azure Virtual Network.
Azure API Management se puede implementar dentro de la red virtual (VNET), por lo que puede tener acceso a
los servicios back-end dentro de la red. El portal para desarrolladores y la puerta de enlace de API pueden
configurarse para que sea accesible desde Internet o solo dentro de la red virtual.
NOTE
Azure API Management admite redes virtuales clásicas y de Azure Resource Manager.
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.
Disponibilidad
IMPORTANT
Esta característica está disponible únicamente en los niveles Premium y Desarrollador de API Management.
Requisitos previos
Para seguir los pasos que se describen en este artículo, debe tener:
Una suscripción de Azure activa.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Una instancia de APIM. Para más información, vea Creación de una instancia de Azure API Management.
Interno: la puerta de enlace de API Management y el portal para desarrolladores solo son accesibles
desde la red virtual con un equilibrador de carga interno. La puerta de enlace puede acceder a
recursos dentro de la red virtual.
Ahora verá una lista de todas las regiones donde se aprovisiona el servicio Administración de API.
Seleccione una VNET y la subred de cada región. La lista se rellena con redes virtuales de Resource
Manager y clásicas disponibles en las suscripciones de Azure que se configuran en la región que va a
configurar.
NOTE
El punto de conexión de servicio en el diagrama anterior incluye la puerta de enlace o proxy, Azure Portal,
el portal para desarrolladores, el portal para editores, GIT y el punto de conexión de administración directa.
Punto de conexión de administración en el diagrama anterior es el punto de conexión hospedado en el
servicio para administrar la configuración mediante Azure Portal y Powershell. Además, tenga en cuenta que,
aunque el diagrama muestra las direcciones IP para sus diversos puntos de conexión, el servicio API
Management solo responde en sus nombres de host configurados.
IMPORTANT
Al implementar una instancia de Azure API Management en una VNET de Resource Manager, el servicio debe
estar en una subred dedicada que no contiene ningún otro recurso excepto instancias de Azure API
Management. Si se intenta implementar una instancia de Azure API Management en una subred de VNET de
Resource Manager que contiene otros recursos, se producirá un error en la implementación.
5. Haga clic en Guardar en la barra de navegación superior.
6. Haga clic en Aplicar configuración de red en la barra de navegación superior.
NOTE
Tenga en cuenta que la dirección VIP de la instancia de API Management cambiará cada vez que se habilita o deshabilita
VNET. La dirección VIP también cambia cuando se mueve API Management de externo a interno o viceversa.
IMPORTANT
Si elimina API Management de una red virtual o cambia aquella en la que se implementa, la red virtual usada anteriormente
puede permanecer bloqueada hasta dos horas. Durante este periodo no será posible eliminar la red virtual ni implementar un
nuevo recurso en ella.
IMPORTANT
Si planea utilizar un servidor DNS personalizado para la red virtual, debe configurarlo antes de implementar en él un servicio
API Management. En caso contrario, deberá actualizar el servicio API Management cada vez que cambie los servidores DNS
mediante la ejecución de la operación Aplicar configuración de red
Puertos necesarios para API Management: el tráfico entrante y saliente en la subred en la que se
implementa API Management puede controlarse mediante el grupo de seguridad de red. Si alguno de estos
puertos no está disponible, es posible que API Management no funcione correctamente y sea inaccesible. Tener
bloqueados uno o varios de estos puertos es otro problema común de una configuración incorrecta cuando se
usa API Management con una red virtual.
Cuando la instancia del servicio API Management se hospeda en una red virtual, se usan los puertos de la tabla
siguiente.
ETIQUETAS DE
PUERTOS DE PROTOCOLO DE SERVICIO TIPO DE RED
ORIGEN/DESTINO DIRECCIÓN TRANSPORTE ORIGEN/DESTINO PROPÓSITO (*) VIRTUAL
IMPORTANT
Los puertos para los que el Propósito está en negrita son necesarios para que el servicio API Management se implemente
correctamente. Sin embargo, si se bloquean los otros puertos, se producirá la degradación de la capacidad de usar y
supervisar el servicio en ejecución.
Funcionalidad SSL: para permitir la creación y validación de la cadena de certificados SSL, el servicio API
Management necesita conectividad de red saliente a ocsp.msocsp.com, mscrl.microsoft.com y
crl.microsoft.com. Esta dependencia no es obligatoria, si los certificados que cargue en API Management
contienen la cadena completa de la raíz de la entidad de certificación.
Acceso DNS: Se requiere acceso saliente en el puerto 53 para establecer la comunicación con los
servidores DNS. Si existe un servidor DNS personalizado en el otro punto de conexión de una puerta de
enlace de VPN, el servidor DNS debe estar accesible desde la subred que alberga la API Management.
Supervisión de métricas y estado: conexión de red saliente a puntos de conexión de supervisión de
Azure, que se resuelven en los siguientes dominios:
Retransmisión de SMTP: conectividad de red de salida para la retransmisión de SMTP, que se resuelve en
el host smtpi-co1.msn.com , smtpi-ch1.msn.com , smtpi-db3.msn.com , smtpi-sin.msn.com y
ies.global.microsoft.com .
CAPTCHA del portal para desarrolladores: conectividad de red saliente para el CAPTCHA del portal
para desarrolladores, que se resuelve en el host client.hip.live.com .
Diagnósticos de Azure Portal: para permitir el flujo de registros de diagnóstico desde Azure Portal al usar
la extensión API Management desde dentro de una red Virtual, se requiere el acceso saliente a
dc.services.visualstudio.com en el puerto 443. Esto ayuda a solucionar los problemas que pueden surgir al
usar la extensión.
Forzar la tunelización del tráfico al firewall local mediante la aplicación virtual de red o de
Express Route: Una configuración común de los clientes es definir su propia ruta predeterminada
(0.0.0.0.0/0) que fuerza a todo el tráfico de la subred delegada de API Management a pasar a través de un
firewall local o a un dispositivo virtual de red. El flujo de tráfico interrumpe invariablemente la conectividad
con Azure API Management porque el tráfico saliente está bloqueado de forma local o porque se usa NAT
para convertirlo en un conjunto de direcciones irreconocibles que no funcionan con varios puntos de
conexión de Azure. La solución requiere que se hagan un par de cosas:
Habilite los puntos de conexión de servicio en la subred en la que se ha implementado el servicio API
Management. Los puntos de conexión de servicio debe habilitarse para Azure SQL, Azure Storage,
Azure Event Hubs y Azure ServiceBus. La habilitación de los puntos de conexión directamente desde
la subred delegada de API Management a estos servicios les permite utilizar la red troncal de
Microsoft Azure, que proporciona un enrutamiento óptimo para el tráfico de servicios. Si usa puntos
de conexión de servicio con una API Management con túnel forzado, el tráfico de servicios de Azure
anterior no se enruta a través de tunelización forzada. El resto del tráfico de dependencia del servicio
API Management se enruta con tunelización forzada y no se puede perder o este servicio no
funcionaría correctamente.
Todo el tráfico del plano de control desde Internet al punto de conexión de administración del
servicio API Management se enruta a través de un conjunto específico de IP de entrada hospedadas
en API Management. Cuando el tráfico se produce con tunelización forzada, no se asignarán
simétricamente las respuestas a estas direcciones IP de origen de entrada. Para superar la limitación,
necesitamos agregar las siguientes rutas definidas por el usuario (UDR ) para dirigir el tráfico de
vuelta a Azure mediante el establecimiento del destino de estas rutas de host a "Internet". El conjunto
de direcciones IP de entrada para el tráfico del plano de control es como sigue:
Para otras dependencias de servicios API Management con tunelización forzada, debería haber una
forma de resolver el nombre de host y llegar hasta el punto de conexión. Entre ellas se incluyen las
siguientes:
Supervisión de métricas y estado
Diagnósticos de Azure Portal
Retransmisión de SMTP
CAPTCHA del portal para desarrolladores
Solución de problemas
Programa de instalación inicial: cuando la implementación inicial del servicio API Management en una
subred no se realiza correctamente, se recomienda implementar una máquina virtual en la misma subred.
Siga con el escritorio remoto en la máquina virtual y compruebe que hay conectividad al menos con cada
recurso que abarca su suscripción de Azure
Azure Storage Blob
Azure SQL Database
Tabla de Azure Storage
IMPORTANT
Una vez que valide la conectividad, asegúrese de quitar todos los recursos implementados en la subred, antes de
implementar API Management en ella.
Actualizaciones incrementales: Al realizar cambios en la red, consulte NetworkStatus API para validar si
el servicio API Management no ha perdido el acceso a cualquiera de los recursos críticos de los que
depende. El estado de conectividad debe actualizarse cada 15 minutos.
Vínculos de navegación de recursos: cuando se implementan en la subred de red virtual del estilo de
Resource Manager, API Management reserva la subred creando un vínculo de navegación de recursos. Si la
subred ya contiene un recurso de un proveedor distinto, la implementación producirá un error. De forma
similar, al eliminar un servicio API Management o moverlo a una subred diferente, se quitará ese vínculo de
navegación de recursos.
Enrutamiento
También se reservará una dirección IP pública (VIP ) con equilibrio de carga para proporcionar acceso a todos
los puntos de conexión del servicio.
Se usará una dirección IP de un intervalo de IP de subred (DIP ) para el acceso a los recursos dentro de la red
virtual y una dirección IP pública (VIP ) para el acceso a los recursos fuera de la red virtual.
La dirección IP pública con equilibrio de carga puede encontrarse en la hoja Información general/nformación
esencial en Azure Portal.
Limitaciones
Una subred que contenga instancias de API Management no puede contener otros tipos de recursos de Azure.
La subred y el servicio API Management tienen que estar en la misma suscripción.
Una subred que contenga instancias de API Management no se puede mover a otras suscripciones.
Para implementaciones de API Management de varias regiones configuradas en el modo de red virtual interna,
los usuarios son responsables de administrar el equilibrio de carga a través de varias regiones, ya que son los
propietarios del enrutamiento.
La conectividad de un recurso en una VNET emparejada globalmente a otra región con el servicio API
Management en modo interno no funciona debido a la limitación de la plataforma. Para obtener más
información, consulte el apartado Los recursos en una red virtual no pueden comunicarse con la dirección IP de
un equilibrador de carga interno de Azure en la red virtual emparejada.
Contenido relacionado
Conexión de una red virtual a back-end mediante VPN Gateway
Conexión a una red virtual a partir de diferentes modelos de implementación
Uso de API Inspector para hacer un seguimiento de las llamadas en Azure API Management
Preguntas más frecuentes acerca de Virtual Network
Etiquetas de servicio
Uso del servicio Azure API Management con una red
virtual interna
29/07/2019 • 10 minutes to read • Edit Online
Con Azure Virtual Network, Azure API Management puede administrar las API que no están accesibles desde
Internet. Para establecer la conexión, hay una serie de tecnologías de VPN disponibles. API Management puede
implementarse de dos modos en una red virtual:
Externo
Interno
Cuando API Management se implementa en el modo de red virtual interna, todos los puntos de conexión de
servicio (puerta de enlace, portal del desarrollador, Azure Portal, administración directa y Git) solamente están
visibles en una red virtual en la que usted controla el acceso. Ninguno de los puntos de conexión de servicio está
registrado en el servidor DNS público.
Si utiliza API Management en modo interno, puede conseguir los siguientes escenarios:
Puede conseguir que terceras personas puedan obtener acceso de forma segura a las API hospedadas en el
centro de datos privado desde fuera de este centro utilizando conexiones de sitio a sitio o conexiones de VPN
de Azure ExpressRoute.
Puede permitir escenarios de nube híbrida exponiendo las API basadas en la nube y las API locales a través de
una puerta de enlace común.
Puede administrar las API hospedadas en varias ubicaciones geográficas mediante un único punto de conexión
de puerta de enlace.
Disponibilidad
IMPORTANT
Esta característica está disponible únicamente en los niveles Premium y Desarrollador de API Management.
Requisitos previos
Para seguir los pasos que se describen en este artículo, debe tener:
Una suscripción activa a Azure.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Una instancia de Azure API Management. Para más información, vea Creación de una instancia de
Azure API Management.
Cuando se implementa un servicio API Management en una red virtual, un lista de puertos se usan y deben
estar abiertos.
4. Seleccione Guardar.
Después de la implementación se realiza correctamente, debería ver privada dirección IP virtual y pública
dirección IP virtual del servicio API Management en la hoja de información general. El privada dirección IP virtual
es una carga equilibrada de la dirección IP desde dentro de la API de administración delegada subred sobre qué
gateway , portal , management y scm pueden tener acceso a los puntos de conexión. El pública se utiliza la
dirección IP virtual sólo para controlar el tráfico del plano a management punto de conexión de puerto 3443 y
puede bloquearse hasta el [ApiManagement] ServiceTags servicetag.
NOTE
La consola de prueba disponible en Azure Portal no funcionará con un servicio implementado en una red virtual interna, ya
que la dirección Url de puerta de enlace no está registrada en el DNS público. En su lugar, debe usar la consola de prueba que
se ofrece en el Portal para desarrolladores.
Configuración de DNS
Cuando API Management está en modo de red virtual externa, el DNS está administrado por Azure. En el modo
de red virtual interna, es usted quien tiene que administrar su propio enrutamiento.
NOTE
El servicio API Management no escucha las solicitudes procedentes de direcciones IP. Solo responde a las solicitudes dirigidas
al nombre de host establecido en los puntos de conexión de servicio. Estos puntos de conexión pueden ser la puerta de
enlace, Azure Portal y el portal del desarrollador, el punto de conexión de administración directa y GIT.
2. A continuación, puede crear registros en el servidor DNS para acceder a los puntos de conexión que solo
están accesibles desde dentro de la red virtual.
Enrutamiento
Se reservará una dirección IP virtual privada con equilibrio de carga desde el intervalo de subred y se utilizará
para tener acceso a los puntos de conexión del servicio API Management desde la red virtual.
También se reservará una dirección IP pública (VIP ) con equilibrio de carga para proporcionar acceso al punto
de conexión del servicio de administración solo a través del puerto 3443.
Se usará una dirección IP de un intervalo de IP de subred (DIP ) para el acceso a los recursos dentro de la red
virtual y una dirección IP pública (VIP ) para el acceso a los recursos fuera de la red virtual.
Las direcciones IP privadas y públicas con equilibrio de carga pueden encontrarse en la hoja Información
general/nformación esencial en Azure Portal.
Contenido relacionado
Para obtener más información, consulte los artículos siguientes:
Problemas comunes de configuración de red al establecer Azure API Management en una red virtual
Preguntas más frecuentes (P+F ) acerca de Azure Virtual Network
Creating a record in DNS (Creación de un registro en DNS )
Integración de API Management en una red virtual
interna con Application Gateway
29/07/2019 • 21 minutes to read • Edit Online
Información general
El servicio API Management se puede configurar en una red virtual en modo interno, para que sea accesible
únicamente desde dentro de la red virtual. Azure Application Gateway es un servicio PAAS que proporciona un
equilibrador de carga de nivel 7. Actúa como un servicio de proxy inverso y proporciona entre su oferta un firewall
de aplicaciones web (WAF ).
La combinación de una instancia de API Management aprovisionada en una red virtual interna con el front-end de
Application Gateway permite los siguientes escenarios:
Utilizar el mismo recurso de API Management para su uso por los consumidores internos y los consumidores
externos.
Utilizar un único recurso de API Management y tener definido un subconjunto de API en API Management
disponible para los consumidores externos.
Proporcionar una solución de llave en mano para activar y desactivar el acceso a API Management desde la red
Internet pública.
Disponibilidad
IMPORTANT
Esta característica está disponible únicamente en los niveles Premium y Desarrollador de API Management.
Requisitos previos
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.
Para seguir los pasos que se describen en este artículo, debe tener:
Una suscripción de Azure activa.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Certificados pfx y cer para el nombre de host de API y pfx para el nombre de host del portal para
desarrolladores.
Escenario
En este artículo se explica cómo usar un único servicio de API Management para los consumidores tanto internos
como externos y hacer que actúe como un único servidor de front-end para las API locales y en la nube. También
verá cómo exponer solamente un subconjunto de las API (resaltado en verde en el ejemplo) para permitir su uso
externo, usando para ello la funcionalidad de enrutamiento disponible en Application Gateway.
En el primer ejemplo de la configuración, todas las API se administran únicamente desde dentro de la red virtual.
Los consumidores internos (resaltados en color naranja) pueden tener acceso a todas las API internas y externas. El
tráfico nunca sale a Internet. La conectividad de alto rendimiento se proporciona mediante circuitos ExpressRoute.
Antes de empezar
Asegúrese de que está usando la versión más reciente de Azure PowerShell. Consulte las instrucciones de
instalación en Instalación de Azure PowerShell.
WARNING
Si usa Azure AD o un método de autenticación de terceros, habilite la característica de afinidad de sesión basada en cookies
de Application Gateway.
Connect-AzAccount
Paso 3
Cree un grupo de recursos (omita este paso si usa uno existente).
Azure Resource Manager requiere que todos los grupos de recursos especifiquen una ubicación. Esta se utiliza
como ubicación predeterminada para los recursos de ese grupo de recursos. Asegúrese de que todos los
comandos para crear una puerta de enlace de aplicaciones usan el mismo grupo de recursos.
Paso 2
Asigne el intervalo de direcciones 10.0.1.0/24 a la variable subnet que se va a usar para API Management al crear
la red virtual.
Paso 3
Cree una red virtual llamada appgwvnet en el grupo de recursos apim -appGw-RG para la región Oeste de EE.
UU. Use el prefijo 10.0.0.0/16 con las subredes 10.0.0.0/24 y 10.0.1.0/24.
Paso 4
Asigne una variable de subred para los pasos siguientes.
$appgatewaysubnetdata = $vnet.Subnets[0]
$apimsubnetdata = $vnet.Subnets[1]
Paso 2
Cree un servicio de API Management dentro de la red virtual.
$apimServiceName = "ContosoApi" # API Management service instance name
$apimOrganization = "Contoso" # organization name
$apimAdminEmail = "[email protected]" # administrator's email address
$apimService = New-AzApiManagement -ResourceGroupName $resGroupName -Location $location -Name $apimServiceName
-Organization $apimOrganization -AdminEmail $apimAdminEmail -VirtualNetwork $apimVirtualNetwork -VpnType
"Internal" -Sku "Developer"
Cuando el comando anterior se complete con éxito, consulte la configuración de DNS necesaria para tener acceso
al servicio de API Management en una red virtual interna para tener acceso a él. Este paso puede tardar más de
media hora.
Paso 2
Cree y establezca los objetos de configuración del nombre de host para el servidor proxy y el portal.
$apimService.ProxyCustomHostnameConfiguration = $proxyHostnameConfig
$apimService.PortalCustomHostnameConfiguration = $portalHostnameConfig
Set-AzApiManagement -InputObject $apimService
Paso 2
Configure el puerto IP de front-end para el punto de conexión de IP pública. Este puerto es el puerto al que se
conectan los usuarios finales.
Paso 3
Configuración de la dirección IP de front-end con el punto de conexión de IP pública
Paso 4
Configure el certificado para Application Gateway, que se usará para descifrar y volver a cifrar el tráfico que pasa
por ella.
Paso 5
Cree los agentes de escucha HTTP para Application Gateway. Asígneles la configuración IP de front-end, el puerto
y los certificados SSL que se usarán.
Paso 6
Cree sondeos personalizados para el punto de conexión de dominio del proxy ContosoApi del servicio API
Management. La ruta de acceso /status-0123456789abcdef es un punto de conexión de mantenimiento
predeterminado hospedado en todos los servicios de API Management. Establezca api.contoso.net como un
nombre de host de sondeo personalizado para protegerlo con el certificado SSL.
NOTE
El nombre de host contosoapi.azure-api.net es el nombre de host de proxy predeterminado configurado cuando se crea
un servicio denominado contosoapi en el ámbito público de Azure.
Paso 7
Cargue el certificado que se usará en los recursos del grupo de back-end habilitado para SSL. Este es el mismo
certificado que ha proporcionado en el paso 4 anterior.
Paso 8
Configure las opciones de back-end HTTP para Application Gateway. Esto incluye la configuración de un límite de
tiempo de espera para la solicitud de back-end después del cual se cancela. Este valor es distinto del tiempo de
espera del sondeo.
Paso 9:
Configure el grupo de direcciones IP de back-end denominado apimbackend con dirección IP virtual interna para
el servicio de API Management creado anteriormente.
Paso 10
Cree reglas para Application Gateway para usar el enrutamiento básico.
TIP
Cambie el tipo de regla y el enrutamiento para restringir el acceso a determinadas páginas del portal para desarrolladores.
Paso 11
Configure el número de instancias y el tamaño de Application Gateway. En este ejemplo, usamos WAF SKU para
aumentar la seguridad de los recursos de API Management.
Paso 12
Configuración de WAFS para que esté en modo "Prevención".
$appgwName = "apim-app-gw"
$appgw = New-AzApplicationGateway -Name $appgwName -ResourceGroupName $resGroupName -Location $location -
BackendAddressPools $apimProxyBackendPool -BackendHttpSettingsCollection $apimPoolSetting,
$apimPoolPortalSetting -FrontendIpConfigurations $fipconfig01 -GatewayIpConfigurations $gipconfig -
FrontendPorts $fp01 -HttpListeners $listener, $portalListener -RequestRoutingRules $rule01, $rule02 -Sku $sku -
WebApplicationFirewallConfig $config -SslCertificates $cert, $certPortal -AuthenticationCertificates $authcert
-Probes $apimprobe, $apimPortalProbe
Resumen
El servicio Azure API Management configurado en una red virtual proporciona una interfaz de puerta de enlace
única para todas las API configuradas, independientemente de si están hospedadas de forma local o en la nube. La
integración de Application Gateway con API Management proporciona la flexibilidad de habilitar de manera
selectiva API determinadas para que estén accesibles en Internet, así como la provisión de un firewall de aplicación
web como front-end para la instancia de API Management.
Pasos siguientes
Obtenga más información sobre Azure Application Gateway.
Introducción a Puerta de enlace de aplicaciones
Firewall de aplicaciones web de Application Gateway
Application Gateway mediante enrutamiento basado en rutas de acceso
Más información acerca de API Management y redes virtuales
El uso de API Management solo está disponible en la red virtual
Usar Azure API Management con redes virtuales
Cómo asegurar servicios back-end con la
autenticación de certificados de cliente en Azure API
Management
25/05/2018 • 6 minutes to read • Edit Online
API Management permite acceder de forma segura al servicio back-end de una API con certificados de cliente.
Esta guía muestra cómo administrar certificados del servicio Azure API Management en Azure Portal. También se
explica cómo configurar una API para que use un certificado para acceder a un servicio back-end.
Para obtener más información sobre cómo administrar certificados con la API de REST de API Management,
consulte Entidad de certificado de la API REST de Azure API Management.
Requisitos previos
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module
(Presentación del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az,
consulte Instalación de Azure PowerShell.
Esta guía muestra cómo configurar la instancia de servicio de API Management para acceder al servicio back-end
de una API con la autenticación de certificados de cliente. Antes de seguir los pasos descritos en este artículo,
debe tener el servicio back-end configurado para la autenticación de certificados de cliente (para configurar la
autenticación de certificados en sitios web de Azure, consulte este artículo). Debe acceder al certificado y a la
contraseña para cargarlos al servicio API Management.
Siga los pasos que se describen a continuación para cargar un nuevo certificado de cliente. Si todavía no ha
creado una instancia del servicio API Management, consulte el tutorial Creación de una instancia del servicio API
Management.
1. Vaya a la instancia del servicio Azure API Management en Azure Portal.
2. Seleccione Certificados de cliente en el menú.
3. Haga clic en el botón + Agregar.
NOTE
El certificado debe estar en formato .pfx . Se admiten los certificados autofirmados.
Una vez que se carga el certificado, aparece en la pestaña Certificados de cliente. Si tiene muchos certificados,
tome nota de la huella digital del certificado deseado con el fin de configurar una API para realizar la autenticación
de puerta de enlace con un certificado de cliente.
NOTE
Para desactivar la validación de la cadena de certificados cuando se utiliza, por ejemplo, un certificado autofirmado, siga los
pasos descritos en esta sección de preguntas más frecuentes.
Si alguna API está usando el certificado, aparecerá una pantalla de advertencia. Para eliminar el certificado,
primero quítelo de todas las API que se hayan configurado para usarlo.
Configurar una API para realizar la autenticación de puerta de enlace
con un certificado de cliente
1. Haga clic en API en el menú API Management de la izquierda y vaya a la API.
WARNING
Este cambio se hace efectivo de forma inmediata y llama a las operaciones de la API que realizarán la autenticación en el
servidor back-end con el certificado.
TIP
Cuando se especifica un certificado para la autenticación de puerta de enlace del servicio back-end de una API, el certificado
se integra en la directiva de dicha API y puede verse en el editor de directivas.
Certificados autofirmados
Si utiliza certificados autofirmados, tendrá que deshabilitar la validación de la cadena de certificados para que API
Management pueda comunicarse con el sistema back-end. De lo contrario, se producirá un error con el código
500. Para establecer esta configuración, puede utilizar los cmdlets de PowerShell New-AzApiManagementBackend (con
el nuevo back-end) o Set-AzApiManagementBackend (con el back-end existente) y establecer el parámetro
-SkipCertificateChainValidation en True .
Azure API Management permite instalar los certificados de entidad de certificación en la máquina dentro de los
almacenes de certificados intermedio y raíz de confianza. Esta funcionalidad debe usarse si los servicios requieren
un certificado de entidad de certificación personalizado.
En este artículo se muestra cómo administrar certificados de entidad de certificación de una instancia del servicio
Azure API Management en Azure Portal.
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module
(Presentación del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az,
consulte Instalación de Azure PowerShell.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Siga los pasos que se describen a continuación para cargar un nuevo certificado de entidad de certificación. Si
todavía no ha creado una instancia del servicio API Management, consulte el tutorial Creación de una instancia
del servicio API Management.
1. Vaya a la instancia del servicio Azure API Management en Azure Portal.
2. Seleccione Certificados de entidad de certificado de entidad de certificación en el menú.
3. Haga clic en el botón + Agregar.
4. Busque el certificado y decida cuál es el almacén de certificados. Solo se necesita la clave pública, no la
contraseña.
Azure API Management admite varias versiones del protocolo TLS para los lados cliente y back-end, así como el
cifrado 3DES.
Esta guía muestra cómo administrar la configuración de los protocolos y cifrados en una instancia de Azure API
Management.
Requisitos previos
Para seguir los pasos de este artículo, debe tener:
Una instancia de API Management
Este artículo muestra cómo acceder al nuevo portal para desarrolladores de Azure API Management. Le guiará a
través de la experiencia del editor visual: incorporación y edición de contenido, así como personalización del
aspecto del sitio web.
Requisitos previos
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Importe y publique una instancia de Azure API Management. Para más información, consulte Importación y
publicación.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
NOTE
El nuevo portal para desarrolladores está actualmente en versión preliminar.
Pasos siguientes
Más información acerca del nuevo portal para desarrolladores:
Repositorio de GitHub con el código fuente
Instrucciones sobre el autohospedaje del portal
Hoja de ruta pública del proyecto
Modificación del contenido y el diseño de páginas en
el portal para desarrolladores de Azure API
Management
23/07/2019 • 3 minutes to read • Edit Online
Existen tres maneras fundamentales de personalizar el portal para desarrolladores en Azure API Management:
Editar el contenido de las páginas estáticas y los elementos de diseño de página (que se explica en esta guía)
Actualizar los estilos usados para los elementos de página en el portal para desarrolladores
Modificar las plantillas usadas en las páginas generadas por el portal (por ejemplo, documentos de API,
productos, autenticación de usuario, etc.)
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Pasos siguientes
Actualizar los estilos usados para los elementos de página en el portal para desarrolladores
Modificar las plantillas usadas en las páginas generadas por el portal (por ejemplo, documentos de API,
productos, autenticación de usuario, etc.)
Cómo personalizar el portal para desarrolladores
de Azure API Management mediante plantillas
25/05/2018 • 9 minutes to read • Edit Online
Existen tres maneras fundamentales de personalizar el portal para desarrolladores en Azure API
Management:
Editar el contenido de las páginas estáticas y los elementos de diseño de página
Actualizar los estilos usados para los elementos de página en el portal para desarrolladores
Modificar las plantillas que se usan para las páginas generadas por el portal de (que se explica en esta
guía)
Las plantillas se usan para personalizar el contenido de las páginas del portal para desarrolladores generadas
por el sistema (por ejemplo, documentos de API, productos, autenticación de usuario, etc.). Mediante la
sintaxis DotLiquid y un conjunto proporcionado de recursos de cadena localizada, iconos y controles de
página, dispone de una gran flexibilidad para configurar el contenido de las páginas según le convenga.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
La lista de plantillas muestra varias categorías de plantillas que abarcan las distintas páginas del portal para
desarrolladores. Cada plantilla es diferente, pero los pasos para editarlas y publicar los cambios son los
mismos. Para editar una plantilla, haga clic en el nombre.
Cuando hace clic en una plantilla, se abre la página del portal para desarrolladores que se puede personalizar
con esa plantilla. En este ejemplo se muestra la plantilla Lista de productos. La plantilla Lista de productos
controla el área de la pantalla que se indica con un rectángulo rojo.
Algunas plantillas, como las plantillas Perfil de usuario , personalizan partes diferentes de la misma página.
El editor de cada plantilla del portal para desarrolladores tiene dos secciones que se muestran en la parte
inferior de la página. El lado izquierdo muestra el panel de edición de la plantilla y el lado derecho muestra el
modelo de datos de la plantilla.
El panel de edición de plantillas contiene el marcado que controla la apariencia y el comportamiento de la
página correspondiente en el portal para desarrolladores. El marcado de la plantilla usa la sintaxis DotLiquid .
Un editor popular de DotLiquid es DotLiquid for Designers. Todos los cambios que se realizan en la plantilla
durante la edición se muestran en tiempo real en el explorador, pero no son visibles para los clientes mientras
no se guarda y se publica la plantilla.
El panel Template data (Datos de plantilla) proporciona indicaciones sobre el modelo de datos de las
entidades que están disponibles para su uso en una plantilla determinada. Dichas indicaciones consisten en
los datos actuales que se muestran actualmente en el portal para desarrolladores. Para expandir los paneles
de plantilla, haga clic en el rectángulo de la esquina superior derecha del panel Template data (Datos de
plantilla).
En el ejemplo anterior, se muestran en el portal para desarrolladores dos productos que se recuperaron de los
datos mostrados en el panel Template data (Datos de plantilla), tal como se muestra en el ejemplo siguiente:
{
"Paging": {
"Page": 1,
"PageSize": 10,
"TotalItemCount": 2,
"ShowAll": false,
"PageCount": 1
},
"Filtering": {
"Pattern": null,
"Placeholder": "Search products"
},
"Products": [
{
"Id": "56ec64c380ed850042060001",
"Title": "Starter",
"Description": "Subscribers will be able to run 5 calls/minute up to a maximum of 100
calls/week.",
"Terms": "",
"ProductState": 1,
"AllowMultipleSubscriptions": false,
"MultipleSubscriptionsCount": 1
},
{
"Id": "56ec64c380ed850042060002",
"Title": "Unlimited",
"Description": "Subscribers have completely unlimited access to the API. Administrator
approval is required.",
"Terms": null,
"ProductState": 1,
"AllowMultipleSubscriptions": false,
"MultipleSubscriptionsCount": 1
}
]
}
El marcado de la plantilla Lista de productos procesa los datos para proporcionar el resultado deseado. Para
ello, itere a través de la colección de productos para mostrar información y un vínculo a cada producto.
Observe los elementos <search-control> y <page-control> del marcado. Controlan la presentación de la
búsqueda y los controles de paginación en la página. ProductsStrings|PageTitleProducts es una referencia de
cadena localizada que contiene el texto del encabezado h2 de la página. Para obtener una lista de recursos de
cadena, controles de página e iconos disponibles para su uso en plantillas del portal para desarrolladores,
consulte la referencia de plantillas del portal para desarrolladores de API Management.
<search-control></search-control>
<div class="row">
<div class="col-md-9">
<h2>{% localized "ProductsStrings|PageTitleProducts" %}</h2>
</div>
</div>
<div class="row">
<div class="col-md-12">
{% if products.size > 0 %}
<ul class="list-unstyled">
{% for product in products %}
<li>
<h3><a href="/products/{{product.id}}">{{product.title}}</a></h3>
{{product.description}}
</li>
{% endfor %}
</ul>
<paging-control></paging-control>
{% else %}
{% localized "CommonResources|NoItemsToDisplay" %}
{% endif %}
</div>
</div>
Haga clic en Sí para confirmar y hacer que la plantilla se active en el portal para desarrolladores.
Para publicar todas las versiones de plantillas actualmente sin publicar, haga clic en Publicar en la lista de
plantillas. Las plantillas no publicadas se indican con un asterisco después del nombre de la plantilla. En este
ejemplo, se van a publicar las plantillas Lista de productos y Producto.
Las plantillas recién publicadas entran en vigor de inmediato en el portal para desarrolladores.
La versión de una plantilla publicada anteriormente estará activa en el portal para desarrolladores en cuanto
se complete la operación de reversión.
Las plantillas restauradas deben publicarse individualmente o a la vez siguiendo los pasos descritos en Para
publicar una plantilla.
Pasos siguientes
Para obtener información de referencia sobre plantillas del portal para desarrolladores, recursos de cadena,
iconos y controles de página, consulte la referencia de plantillas del portal para desarrolladores de API
Management.
Autorización de las cuentas de desarrollador
mediante Azure Active Directory en Azure API
Management
25/05/2018 • 8 minutes to read • Edit Online
En este artículo se muestra cómo habilitar el acceso al portal para desarrolladores para usuarios de Azure Active
Directory. También se muestra cómo administrar grupos de usuarios de Azure AD mediante la adición de grupos
externos que contienen a los usuarios.
Requisitos previos
Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
Importe y publique una instancia de Azure API Management. Para más información, consulte Importación y
publicación.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar y Desarrollador de API Management.
2. Seleccionar .
3. En el cuadro de búsqueda, escriba api.
4. Seleccione Servicios API Management.
5. Seleccione su instancia de servicio API Management.
6. En Seguridad, seleccione Identidades.
7. Haga clic en + Agregar en la parte superior.
Aparece el panel Agregar proveedor de identidades a la derecha.
8. En Tipo de proveedor, seleccione Azure Active Directory.
En el panel aparecen controles que le permiten escribir otra información necesaria. Los controles incluyen
Id. de cliente y Secreto de cliente. (Más adelante en el artículo obtendrá información sobre estos
controles).
9. Anote el contenido de Dirección URL de redireccionamiento.
10. En el explorador, abra una pestaña diferente.
11. Navegue hasta Azure Portal: Registros de aplicaciones para registrar una aplicación en Active Directory.
12. En Administrar, seleccione Registros de aplicaciones.
13. Seleccione Nuevo registro. En la página Registrar una aplicación, establezca los valores de la manera
siguiente:
Establezca Nombre en un nombre con sentido; por ejemplo, portal-desarrollador
Establezca Tipos de cuenta admitidos en Solo las cuentas de este directorio organizativo.
Establezca URI de redirección en el valor obtenido en el paso 9.
Elija Registro.
14. Una vez registrada la aplicación, copie el Id. de aplicación (cliente) de la página Información general.
15. Vuelva a la instancia de API Management. En la ventana Agregar proveedor de identidades, pegue el
valor de Id. de aplicación (cliente) en el cuadro Id. de cliente.
16. Vuelva a la configuración de Azure AD, seleccione Certificados y secretos en Administrar. Seleccione el
botón Nuevo secreto de cliente. Escriba un valor en Descripción, seleccione cualquier opción para
Expira y elija Agregar. Copie el valor del secreto del cliente antes de salir de la página. Esta información la
necesitará en el siguiente paso.
17. En Administrar, seleccione Autenticación y luego Tokens de id. en Concesión implícita
18. Vuelva a la instancia de API Management, pegue el secreto en el cuadro Secreto de cliente.
IMPORTANT
Asegúrese de actualizar el secreto de cliente antes de que expire la clave.
19. La ventana Add identity provider (Agregar proveedor de identidades) también contiene el cuadro de
texto Allowed Tenants (Inquilinos permitidos). Ahí, especifique los dominios de las instancias de Azure
AD a las que quiere conceder acceso a las API de la instancia de servicio API Management. Puede separar
varios dominios mediante nuevas líneas, espacios o comas.
NOTE
Puede especificar varios dominios en la sección Allowed Tenants (Inquilinos permitidos). Para que un usuario pueda iniciar
sesión desde otro dominio distinto al dominio original donde se registró la aplicación, un administrador global de ese otro
dominio debe conceder antes a la aplicación permiso de acceso a los datos del directorio. Para conceder permiso, el
administrador global debe: a. Ir a https://<URL of your developer portal>/aadadminconsent (por ejemplo,
https://contoso.portal.azure-api.net/aadadminconsent) ). b. Escribir el nombre de dominio del inquilino de Azure AD al que
desea dar acceso. c. Seleccione Submit (Enviar).
IMPORTANT
Para agregar un grupo externo de Azure AD, primero debe configurar la instancia de Azure AD en la pestaña Identidades
mediante el procedimiento de la sección anterior. Además, la aplicación se debe conceder acceso a Azure AD Graph API con
el permiso Directory.Read.All .
Los grupos externos de Azure AD se agregan desde la pestaña Grupos de la instancia de API Management.
1. Seleccione la pestaña Grupos .
2. Seleccione el botón Add AAD group (Agregar grupo de AAD ).
2. Escriba las credenciales de uno de los usuarios de Azure AD y seleccione Iniciar sesión.
3. En caso de requerirse más información, puede que se le solicite un formulario de registro. Complete el
formulario de registro y seleccione Suscribirse.
Ahora ya inició sesión en el portal para desarrolladores de la instancia del servicio API Management.
Procedimiento para autorizar a las cuentas de
desarrollador para que usen Azure Active Directory
B2C en Azure API Management
23/07/2019 • 7 minutes to read • Edit Online
Información general
Azure Active Directory B2C es una solución de administración de identidades en la nube, destinada a aplicaciones
móviles y web orientadas al consumidor. Puede usarlo para administrar el acceso a su portal para desarrolladores.
Esta guía le muestra la configuración que se necesita en el servicio de API Management para integrarse con Azure
Active Directory B2C. Para más información sobre cómo habilitar el acceso al portal para desarrolladores con
Azure Active Directory clásico, consulte Procedimiento para autorizar a las cuentas de desarrollador para que usen
Azure Active Directory.
NOTE
Para completar los pasos descritos en esta guía, primero debe tener un inquilino de Azure Active Directory B2C en el que
crear una aplicación. Además, debe tener listas las directivas de registro e inicio de sesión. Para más información, consulte
Introducción a Azure Active Directory B2C.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar y Desarrollador de API Management.
NOTE
Si todavía no ha creado una instancia del servicio API Management, consulte Creación de una instancia del servicio
API Management en el tutorial Introducción a Azure API Management.
6. En la hoja Nueva aplicación, escriba un nombre para la aplicación. Elija Sí en Aplicación web o API
Web y elija Sí en Permitir flujo implícito. A continuación, pegue la dirección URL de
redireccionamiento que copió en el paso 3 en el cuadro de texto Dirección URL de respuesta.
7. Haga clic en el botón Crear. Cuando se crea la aplicación, aparece en la hoja Aplicaciones. Haga clic en el
nombre de la aplicación para ver sus detalles.
8. En la hoja Propiedades, copie el identificador de aplicación en el Portapapeles.
3. Se le redirigirá a la directiva de registro que configuró en la sección anterior. Elija registrarse con la dirección
de correo electrónico o una de sus cuentas sociales existentes.
NOTE
Si Azure Active Directory B2C es la única opción habilitada en la pestaña Identidades del portal para editores, se le
redirigirá a la directiva de registro de forma directa.
Una vez completado el registro, se le redirigirá de nuevo al portal para desarrolladores. Ahora ya inició
sesión en el portal para desarrolladores de la instancia del servicio API Management.
Pasos siguientes
Introducción a Azure Active Directory B2C
Azure Active Directory B2C: Marco de directiva extensible
Uso de una cuenta Microsoft como proveedor de identidades en Azure Active Directory B2C
Uso de una cuenta de Google como proveedor de identidades en Azure Active Directory B2C
Uso de una cuenta de LinkedIn como proveedor de identidades en Azure Active Directory B2C
Uso de una cuenta de Facebook como proveedor de identidades en Azure Active Directory B2C
Delegación de registros de usuario y suscripciones a
producto
25/05/2018 • 12 minutes to read • Edit Online
La delegación le permite usar su sitio web actual para controlar el inicio de sesión y la suscripción de los
desarrolladores, así como sus suscripciones a productos, en contraposición al uso de la funcionalidad integrada en
el portal para desarrolladores. Esto habilita su sitio web como propietario de los datos de usuario para poder
realizar la validación de estos pasos de forma personalizada.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Determine cuál será la dirección URL del extremo especial de delegación y escríbala en el campo Dirección
URL del extremo de delegación .
En el campo Clave de autenticación de delegación, escriba el secreto que se usará para procesar una firma
suministrada para su comprobación con objeto de garantizar que la solicitud procede efectivamente de Azure
API Management. Puede hacer clic en el botón generar para que API Management genere de forma aleatoria
una clave en su lugar.
Ahora debe crear el extremo de delegación. Este tiene que realizar varias acciones:
1. Recibir una solicitud de la forma siguiente:
http://www.yourwebsite.com/apimdelegation?operation=SignIn&returnUrl={URL de la página de
origen}&salt={string }&sig={string }
Compare el hash procesado anteriormente con el valor del parámetro de consulta sig . Si los dos
hashes coinciden, vaya a paso siguiente; de lo contrario, deniegue la solicitud.
3. Compruebe que ha recibido una solicitud para inicio de sesión/suscripción: el parámetro de consulta
operation se establecerá en "SignIn".
4. Presente al usuario la interfaz de usuario para que inicie sesión o se suscriba.
5. Si el usuario se suscribe, hay que crear la cuenta correspondiente en Administración de API. Cree un usuario
con la API de REST de API Management. Al hacerlo, asegúrese de que el identificador de usuario se
establece en el mismo valor que existe en su almacén de usuario o en un identificador al que pueda realizar
el seguimiento.
6. Cuando el usuario se autentique correctamente:
solicite un token de inicio de sesión único (SSO ) a través de la API de REST de API Management
anexe un parámetro de consulta returnUrl a la URL de SSO que se recibió de la llamada de API
anterior:
http://www.yourwebsite.com/apimdelegation?operation={operación}&productId={producto al que se
suscribe}&userId={usuario que realiza la solicitud }&salt={cadena }&amp;amp;sig={cadena }
Compare el hash procesado anteriormente con el valor del parámetro de consulta sig . Si los dos
hashes coinciden, vaya a paso siguiente; de lo contrario, deniegue la solicitud.
3. Procese cualquier suscripción a producto en función del tipo de operación solicitada en operation; por
ejemplo, facturación, preguntas adicionales, etc.
4. Tras la correcta suscripción del usuario al producto por su parte, suscriba al usuario al producto de API
Management llamando a la API de REST para las suscripciones.
Ejemplo de código
Estos ejemplos de código enseñan cómo:
Tomar la clave de validación de delegación, que se establece en la pantalla de delegación del portal del
publicador
Crear un HMAC que, después, se usa para validar la firma, probando la validez del valor de returnUrl que se
pasó.
El mismo código funciona para productId y userId con pequeñas modificaciones.
Código C# para generar el hash de returnUrl
using System.Security.Cryptography;
Pasos siguientes
Para más información acerca de la delegación, vea el siguiente vídeo:
Configuración de notificaciones y plantillas de correo
electrónico en Azure API Management
25/05/2018 • 5 minutes to read • Edit Online
Administración de API ofrece la posibilidad de configurar notificaciones de eventos específicos, así como plantillas
de correo electrónico que se usan para comunicarse con los administradores y desarrolladores de una instancia de
API Management. Este artículo muestra cómo configurar las notificaciones de los eventos disponibles y ofrece
información general sobre la configuración de plantillas de correo electrónico que se usan para estos eventos.
Requisitos previos
Si no tiene una instancia del servicio API Management, realice el inicio rápido siguiente: Creación de una instancia
de Azure API Management.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Configuración de notificaciones
1. Seleccione su instancia de API MANAGEMENT.
2. Haga clic en Notificaciones para ver las notificaciones disponibles.
4. Presione Agregar.
Cada plantilla de correo electrónico tiene un asunto en texto sin formato y una definición del cuerpo en formato
HTML. Cada elemento se puede personalizar según se desee.
La lista Parámetros contiene una lista de parámetros que, al insertarlos en el asunto o en el cuerpo, se
reemplazarán por el valor designado cuando se envíe el correo electrónico. Para insertar un parámetro, sitúe el
cursor en donde desee que vaya el parámetro y haga clic en la flecha a la izquierda del nombre del parámetro.
NOTE
Los parámetros no se reemplazan por valores reales al obtener la vista previa o enviar una prueba.
Para guardar los cambios efectuados en la plantilla de correo electrónico, haga clic en Guardar o, si desea
cancelarlos, haga clic en Descartar.
Procedimiento para autorizar a las cuentas de
desarrollador para que usen OAuth 2.0 en Azure API
Management
25/05/2018 • 9 minutes to read • Edit Online
Muchas API admiten OAuth 2.0 para proteger la API y garantizar que solo usuarios válidos obtengan acceso y que,
además, solo puedan tener acceso a los recursos para los que estén autorizados. Para usar la consola interactiva
para desarrolladores de la Azure API Management, el servicio permite configurar la instancia del servicio para que
funcione con la API habilitada para OAuth 2.0.
Requisitos previos
En esta guía se explica cómo configurar la instancia del servicio Administración de API para que use la autorización
OAuth 2.0 con las cuentas de desarrollador, pero no se explica cómo configurar un proveedor de OAuth 2.0.
Aunque los proveedores de OAuth 2.0 tienen configuraciones diferentes, los pasos son similares y se precisa la
misma información para configurar OAuth 2.0 en la instancia del servicio Administración de API. Este tema
muestra ejemplos donde Azure Active Directory actúa como proveedor de OAuth 2.0.
NOTE
Para obtener más información sobre cómo configurar OAuth 2.0 con Azure Active Directory, consulte el ejemplo de WebApp-
GraphAPI-DotNet.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
1. Haga clic en la pestaña OAuth 2.0 en el menú de la izquierda y haga clic en +Agregar.
2. Escriba un nombre y una descripción opcional en los campos Nombre y Descripción.
NOTE
Estos campos sirven para identificar el servidor de autorización OAuth 2.0 en la instancia del servicio Administración
de API y los valores que contienen no proceden del servidor OAuth 2.0.
3. Escriba la URL de la página de registro de cliente. En esta página, los usuarios pueden crear y
administrar sus cuentas. Puede variar en función del proveedor de OAuth 2.0. La URL de la página de
registro de cliente señala a la página que los usuarios pueden utilizar para crear y configurar sus propias
cuentas para proveedores de OAuth 2.0 que admiten la administración de usuarios de las cuentas. Algunas
organizaciones no configuran ni usan esta funcionalidad, aunque la admita el proveedor de OAuth 2.0. Si el
proveedor de OAuth 2.0 no tiene configurada la administración de usuarios de las cuentas, especifique aquí
una URL de marcador de posición, por ejemplo, la URL de su empresa o una URL como
https://placeholder.contoso.com .
4. La siguiente sección del formulario contiene la configuración de Authorization grant types (Tipos de
concesión de autorización), Authorization endpoint URL (URL del punto de conexión de autorización) y
Authorization request method (Método de solicitud de autorización).
Active las casillas de los tipos de concesión de autorización que desee. Código de autorización se
especifica de forma predeterminada.
Escriba la URL del extremo de autorización. En Azure Active Directory, esta URL será similar a la
siguiente, donde se reemplaza <client_id> por el identificador de cliente que identifica la aplicación en el
servidor OAuth 2.0.
https://login.microsoftonline.com/<client_id>/oauth2/authorize
Los valores predeterminados para Métodos de autenticación de cliente y Método de envío de tokens
de acceso son Básico y Encabezado de autorización respectivamente. Estos valores se configuran en
esta sección del formulario, junto con el Ámbito predeterminado.
6. La sección Credenciales de cliente contiene el Id. de cliente y el Secreto del cliente que se obtienen
durante los procesos de creación y configuración del servidor OAuth 2.0. Al especificar el Id. de cliente y el
Secreto del cliente, se genera el uri de redirección para el código de autorización. Con este URI se
configura la URL de respuesta en la configuración del servidor OAuth 2.0.
Si Authorization grant types (Tipos de concesión de autorización) se establece en Resource owner
password (Contraseña de propietario de recursos), las credenciales se especifican con la sección Resource
owner password credentials (Credenciales de contraseña de propietario de recursos). De no ser así, puede
dejarse en blanco.
Cuando complete el formulario, haga clic en Crear para guardar la configuración del servidor de
autorización OAuth 2.0 de API Management. Cuando se guarda la configuración del servidor, pueden
configurarse las API para que usen estos valores, conforme a la sección siguiente.
Configurar una API para que use la autorización de usuario OAuth 2.0
1. Haga clic en API en el menú API Management de la izquierda.
2. Haga clic en el nombre de la API deseada y haga clic en Configuración. Desplácese hasta la sección
Seguridad y, a continuación, active la casilla de OAuth 2.0.
3. Seleccione el Servidor de autorización que quiera en la lista desplegable y haga clic en Guardar.
Probar la autorización de usuario OAuth 2.0 en el portal para
desarrolladores
Tras configurar el servidor de autorización OAuth 2.0 y las API para que usen dicho servidor, puede probarlo. Para
ello, vaya al portal para desarrolladores y llame a una API. Haga clic en Portal para desarrolladores en el menú
superior de la página Introducción de la instancia de Azure API Management.
NOTE
Si solamente tiene una API configurada o visible en su cuenta, al hacer clic en API irá directamente a las operaciones de dicha
API.
Seleccione la operación Recurso GET, haga clic en Abrir consola y seleccione Código de autorización en la lista
desplegable.
Al seleccionar Código de autorización , se abre una ventana emergente con el formulario de suscripción del
proveedor de OAuth 2.0. En este ejemplo, Azure Active Directory ha proporcionado el formulario de suscripción.
NOTE
Si ha deshabilitado los elementos emergentes, el explorador le solicitará que los habilite. Cuando los habilite, seleccione
Código de autorización de nuevo y se mostrará el formulario de suscripción.
Tras iniciar sesión, los Encabezados de solicitud se rellenan con el encabezado Authorization : Bearer que
autoriza la solicitud.
Llegado a este punto, puede configurar los valores que desea para los demás parámetros y enviar la solicitud.
Pasos siguientes
Para obtener más información acerca del uso de OAuth 2.0 y Administración de API, vea el siguiente vídeo y el
artículoque lo acompaña.
Establecimiento o modificación de directivas de
Azure API Management
23/07/2019 • 5 minutes to read • Edit Online
La definición de la directiva es un documento XML que describe una secuencia de declaraciones de entrada y de
salida. El XML se puede editar directamente en la ventana de definición. También puede seleccionar una directiva
predefinida de la lista que se proporciona a la derecha de la ventana de directiva. Las instrucciones aplicables al
ámbito actual están habilitadas y resaltadas. Al hacer clic en una declaración habilitada, se agregará el XML
correspondiente en la ubicación del cursor en la vista de definición.
Para obtener más información sobre directivas, consulte Directivas de Azure API Management.
<policies>
<inbound>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
Pasos siguientes
Vea también los siguientes temas relacionados:
API de transformación
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su configuración
Ejemplos de directivas
Expresiones de las directivas de API Management
23/07/2019 • 15 minutes to read • Edit Online
Este artículo describe la sintaxis de expresiones de directiva C# 7. Cada expresión tiene acceso a la variable de
contexto proporcionada de forma implícita y a un subconjunto permitido de tipos de .NET Framework.
Para obtener más información:
Vea cómo proporcionar información de contexto al servicio back-end. Use las directivas Establecer el
parámetro de cadena de consulta y Establecer encabezado HTTP para proporcionar esta información.
Vea cómo utilizar la directiva de validación de JWT para preautorizar el acceso a operaciones según
notificaciones de token.
Vea cómo se utiliza un seguimiento de API Inspector para ver cómo se evalúan las directivas y los resultados
de las evaluaciones.
Vea cómo usar expresiones con las directivas Obtener de caché y Almacenar en caché para configurar el
almacenamiento en caché de la respuesta de API Management. Defina una duración que coincida con el
almacenamiento en caché de la respuesta del servicio back-end especificado por la directiva Cache-Control
del servicio back-end.
Vea cómo realizar el filtrado de contenido. Quite elementos de datos de la respuesta recibida desde el
servicio back-end mediante las directivas Flujo de control y Establecer cuerpo.
Para descargar las declaraciones de directiva, vaya a api-management-samples/policies en el repositorio de
GitHub.
Sintaxis
Las expresiones de declaración única se incluyen en @(expression) , donde expression es una instrucción de
expresión bien formada de C#.
Las expresiones de múltiples declaraciones se incluyen en @{expression} . Todas las rutas de código de las
expresiones de múltiples declaraciones deben terminar con una declaración return .
Ejemplos
@(true)
@((1+1).ToString())
@("Hi There".Length)
@(Regex.Match(context.Response.Headers.GetValueOrDefault("Cache-Control",""), @"max-age=(?
<maxAge>\d+)").Groups["maxAge"]?.Value)
@{
string value;
if (context.Request.Headers.TryGetValue("Authorization", out value))
{
return Encoding.UTF8.GetString(Convert.FromBase64String(value));
}
else
{
return null;
}
}
Uso
Las expresiones pueden utilizarse como valores de atributos o valores de texto en cualquier directiva de API
Management, a menos que la referencia de la directiva especifique lo contrario.
IMPORTANT
Al utilizar expresiones de directiva, solo hay una verificación limitada de estas cuando se define la directiva. La puerta de
enlace ejecuta las expresiones en tiempo de ejecución, y las excepciones generadas por las expresiones de directiva
generan un error en tiempo de ejecución.
Newtonsoft.Json.Formatting Todo
Newtonsoft.Json.Linq.Extensions Todo
Newtonsoft.Json.Linq.JArray Todo
Newtonsoft.Json.Linq.JConstructor Todo
Newtonsoft.Json.Linq.JContainer Todo
Newtonsoft.Json.Linq.JObject Todo
TYPE MIEMBROS COMPATIBLES
Newtonsoft.Json.Linq.JProperty Todo
Newtonsoft.Json.Linq.JRaw Todo
Newtonsoft.Json.Linq.JToken Todo
Newtonsoft.Json.Linq.JTokenType Todo
Newtonsoft.Json.Linq.JValue Todo
System.Array Todo
System.BitConverter Todo
System.Boolean Todo
System.Byte Todo
System.Char Todo
System.Collections.Generic.HashSet<T> Todo
System.Collections.Generic.ICollection<T> Todo
System.Collections.Generic.IEnumerable<T> Todo
System.Collections.Generic.IEnumerator<T> Todo
System.Collections.Generic.IList<T> Todo
System.Collections.Generic.IReadOnlyCollection<T> Todo
System.Collections.Generic.IReadOnlyDictionary<TKey, Todo
TValue>
System.Collections.Generic.ISet<T> Todo
System.Collections.Generic.List<T> Todo
System.Collections.Generic.Queue<T> Todo
System.Collections.Generic.Stack<T> Todo
System.Convert Todo
TYPE MIEMBROS COMPATIBLES
System.DateTimeKind UTC
System.DateTimeOffset Todo
System.Decimal Todo
System.Double Todo
System.Exception Todo
System.Guid Todo
System.Int16 Todo
System.Int32 Todo
System.Int64 Todo
System.IO.StringReader Todo
System.IO.StringWriter Todo
System.Linq.Enumerable Todo
System.Math Todo
System.MidpointRounding Todo
System.Net.WebUtility Todo
System.Nullable Todo
System.Random Todo
System.SByte Todo
System.Security.Cryptography.AsymmetricAlgorithm Todo
System.Security.Cryptography.CipherMode Todo
System.Security.Cryptography.HashAlgorithm Todo
System.Security.Cryptography.HashAlgorithmName Todo
TYPE MIEMBROS COMPATIBLES
System.Security.Cryptography.HMAC Todo
System.Security.Cryptography.HMACMD5 Todo
System.Security.Cryptography.HMACSHA1 Todo
System.Security.Cryptography.HMACSHA256 Todo
System.Security.Cryptography.HMACSHA384 Todo
System.Security.Cryptography.HMACSHA512 Todo
System.Security.Cryptography.KeyedHashAlgorithm Todo
System.Security.Cryptography.MD5 Todo
System.Security.Cryptography.Oid Todo
System.Security.Cryptography.PaddingMode Todo
System.Security.Cryptography.RNGCryptoServiceProvider Todo
System.Security.Cryptography.RSA Todo
System.Security.Cryptography.RSAEncryptionPadding Todo
System.Security.Cryptography.RSASignaturePadding Todo
System.Security.Cryptography.SHA1 Todo
System.Security.Cryptography.SHA1Managed Todo
System.Security.Cryptography.SHA256 Todo
System.Security.Cryptography.SHA256Managed Todo
System.Security.Cryptography.SHA384 Todo
System.Security.Cryptography.SHA384Managed Todo
System.Security.Cryptography.SHA512 Todo
System.Security.Cryptography.SHA512Managed Todo
System.Security.Cryptography.SymmetricAlgorithm Todo
System.Security.Cryptography.X509Certificates.PublicKey Todo
System.Security.Cryptography.X509Certificates.RSACertificat Todo
eExtensions
TYPE MIEMBROS COMPATIBLES
System.Security.Cryptography.X509Certificates.X500Distingu NOMBRE
ishedName
System.Security.Cryptography.X509Certificates.X509Certifica Todo
te
System.Security.Cryptography.X509Certificates.X509Certifica Todo
te2
System.Security.Cryptography.X509Certificates.X509Content Todo
Type
System.Security.Cryptography.X509Certificates.X509NameTy Todo
pe
System.Single Todo
System.String Todo
System.StringComparer Todo
System.StringComparison Todo
System.StringSplitOptions Todo
System.Text.Encoding Todo
System.Text.RegularExpressions.RegexOptions Todo
System.Text.StringBuilder Todo
System.TimeSpan Todo
System.TimeZone Todo
System.TimeZoneInfo.AdjustmentRule Todo
System.TimeZoneInfo.TransitionTime Todo
TYPE MIEMBROS COMPATIBLES
System.TimeZoneInfo Todo
System.Tuple Todo
System.UInt16 Todo
System.UInt32 Todo
System.UInt64 Todo
System.Uri Todo
System.UriPartial Todo
System.Xml.Linq.Extensions Todo
System.Xml.Linq.XAttribute Todo
System.Xml.Linq.XCData Todo
System.Xml.Linq.XComment Todo
System.Xml.Linq.XContainer Todo
System.Xml.Linq.XDeclaration Todo
System.Xml.Linq.XDocumentType Todo
System.Xml.Linq.XElement Todo
System.Xml.Linq.XName Todo
System.Xml.Linq.XNamespace Todo
System.Xml.Linq.XNode Todo
System.Xml.Linq.XNodeDocumentOrderComparer Todo
System.Xml.Linq.XNodeEqualityComparer Todo
System.Xml.Linq.XObject Todo
System.Xml.Linq.XProcessingInstruction Todo
System.Xml.Linq.XText Todo
System.Xml.XmlNodeType Todo
Variable de contexto
Una variable denominada context está disponible implícitamente en todas las expresiones de directiva. Sus
miembros proporcionan información relativa a \request . Todos los miembros de context son de solo lectura.
Implementación
LastError
operación
Producto
Solicitud
Respuesta
Suscripción
User
IsCurrentRevision: bool
Name: cadena
Path: cadena
Revision: cadena
ServiceUrl: IUrl
Version: cadena
ServiceName: cadena
Reason: cadena
Message: cadena
Scope: cadena
Section: cadena
Path: cadena
PolicyId: cadena
Method: cadena
Name: cadena
UrlTemplate: cadena
ApprovalRequired: bool
Groups: IEnumerable<IGroup>
Id: cadena
Name: cadena
SubscriptionLimit: int?
SubscriptionRequired: bool
MÉTODOS, PROPIEDADES Y VALORES DE PARÁMETRO
VARIABLE DE CONTEX TO ADMITIDOS
Certificate:
System.Security.Cryptography.X509Certificates.X509Certifica
te2
IpAddress: cadena
Method: cadena
OriginalUrl: IUrl
Url: IUrl
StatusCode: int
StatusReason: cadena
EndDate: DateTime?
Id: cadena
Key: cadena
Name: cadena
PrimaryKey: cadena
SecondaryKey: cadena
StartDate: DateTime?
MÉTODOS, PROPIEDADES Y VALORES DE PARÁMETRO
VARIABLE DE CONTEX TO ADMITIDOS
FirstName: cadena
Groups: IEnumerable<IGroup>
Id: cadena
Identities: IEnumerable<IUserIdentity>
LastName: cadena
Note: cadena
RegistrationDate: Datetime
Name: cadena
Path: cadena
Protocols: IEnumerable<cadena>
ServiceUrl: IUrl
SubscriptionKeyParameterNames:
ISubscriptionKeyParameterNames
Name: cadena
Path: cadena
Port: int
QueryString: cadena
Scheme: cadena
MÉTODOS, PROPIEDADES Y VALORES DE PARÁMETRO
VARIABLE DE CONTEX TO ADMITIDOS
Provider: cadena
Query: cadena
UserId: cadena
Audience: IEnumerable<cadena>
ExpirationTime: DateTime?
Id: cadena
Issuer: cadena
IssuedAt: DateTime?
NotBefore: DateTime?
Subject: cadena
Type: cadena
byte[] Encrypt(input: this byte[], alg: string, key:byte[], input: texto no cifrado que se va a cifrar
iv:byte[])
alg: nombre de un algoritmo de cifrado simétrico
byte[] Encrypt(entrada: este byte[], alg: input: texto no cifrado que se va a cifrar
System.Security.Cryptography.SymmetricAlgorithm)
alg: algoritmo de cifrado
byte[] Encrypt(entrada: este byte[], alg: input: texto no cifrado que se va a cifrar
System.Security.Cryptography.SymmetricAlgorithm,
key:byte[], iv:byte[]) alg: algoritmo de cifrado
byte[] Decrypt(input: this byte[], alg: string, key:byte[], input: texto cifrado que se va a descifrar
iv:byte[])
alg: nombre de un algoritmo de cifrado simétrico
byte[] Decrypt(entrada: este byte[], alg: input: texto cifrado que se va a descifrar
System.Security.Cryptography.SymmetricAlgorithm)
alg: algoritmo de cifrado
byte[] Decrypt(entrada: este byte[], alg: input: texto cifrado que se va a descifrar
System.Security.Cryptography.SymmetricAlgorithm,
key:byte[], iv:byte[]) alg: algoritmo de cifrado
bool VerifyNoRevocation(input: this Realiza una validación de la cadena X.509 sin comprobar el
System.Security.Cryptography.X509Certificates.X509Certifica estado de revocación de los certificados.
te2)
input - certificate object
Pasos siguientes
Para obtener más información sobre cómo trabajar con directivas, consulte:
Directivas de Azure API Management
API de transformación
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su
configuración
Ejemplos de directivas
Almacenamiento en caché personalizado en Azure
API Management
25/05/2018 • 15 minutes to read • Edit Online
El servicio Azure API Management integra compatibilidad para el almacenamiento en caché de respuestas HTTP
mediante el uso de la dirección URL como clave. La clave se puede modificar por los encabezados de solicitud
con las propiedades vary-by . Esto es útil para almacenar en caché las respuestas HTTP completas (también
conocidas como representaciones), pero a veces resulta útil almacenar en caché solo una parte de una
representación. Las nuevas directivas cache-lookup-value y cache-store-value permiten almacenar y recuperar
fragmentos arbitrarios de datos desde las definiciones de directiva. Esta capacidad también agrega valor a la
directiva send-request previamente introducida porque ahora se puede almacenar en caché las respuestas desde
servicios externos.
Arquitectura
El servicio API Management usa una caché de datos compartida por inquilino que, cuando escale verticalmente
a varias unidades, seguirá obteniendo acceso a los mismos datos en caché. Sin embargo, cuando se trabaja con
una implementación de varias regiones son memorias caché independientes dentro de cada una de las regiones.
Es importante no tratar la memoria caché como un almacén de datos, donde está el único origen de información.
Sin embargo, si ya lo hizo y más adelante decide aprovechar las ventajas de la implementación en varias
regiones, es posible que los clientes con los usuarios que viajan puedan perder el acceso a los datos almacenados
en caché.
{
"airline" : "Air Canada",
"flightno" : "871",
"status" : "ontime",
"gate" : "B40",
"terminal" : "2A",
"userprofile" : "$userprofile$"
}
<set-variable
name="enduserid"
value="@(context.Request.Headers.GetValueOrDefault("Authorization","").Split(' ')[1].AsJwt()?.Subject)" />
API Management almacena el valor enduserid en una variable de contexto para su uso posterior. El siguiente
paso es determinar si una solicitud anterior ya ha recuperado la información de usuario y la ha almacenado en la
memoria caché. Para ello, API Management utiliza la directiva cache-lookup-value .
<cache-lookup-value
key="@("userprofile-" + context.Variables["enduserid"])"
variable-name="userprofile" />
Si no hay ninguna entrada en la memoria caché que se corresponda con el valor de clave, no se creará la variable
de contexto userprofile . API Management comprueba el éxito de la búsqueda mediante la directiva de flujo de
control choose .
<choose>
<when condition="@(!context.Variables.ContainsKey("userprofile"))">
<!-- If the userprofile context variable doesn’t exist, make an HTTP request to retrieve it. -->
</when>
</choose>
Si la variable de contexto userprofile no existe, API Management tendrá que realizar una solicitud HTTP para
recuperarla.
<send-request
mode="new"
response-variable-name="userprofileresponse"
timeout="10"
ignore-error="true">
<!-- Build a URL that points to the profile for the current end-user -->
<set-url>@(new Uri(new Uri("https://apimairlineapi.azurewebsites.net/UserProfile/"),
(string)context.Variables["enduserid"]).AbsoluteUri)
</set-url>
<set-method>GET</set-method>
</send-request>
API Management usa enduserid para construir la dirección URL en el recurso del perfil de usuario. Una vez que
API Management tenga la respuesta, extrae el texto del cuerpo de la respuesta y lo almacena en una variable de
contexto.
<set-variable
name="userprofile"
value="@(((IResponse)context.Variables["userprofileresponse"]).Body.As<string>())" />
Para evitar que API Management realice esta solicitud HTTP de nuevo, cuando el mismo usuario realiza otra
solicitud, puede especificar que se almacenar el perfil de usuario en la memoria caché.
<cache-store-value
key="@("userprofile-" + context.Variables["enduserid"])"
value="@((string)context.Variables["userprofile"])" duration="100000" />
API Management almacena el valor en la memoria caché con la misma clave con la que lo intentó recuperar
originalmente. La duración que API Management elige para almacenar el valor debe basarse en la frecuencia de
los cambios de la información y en lo tolerantes que son los usuarios con la información sin actualizar.
Es importante tener en cuenta que la recuperación desde la caché sigue siendo una solicitud de red fuera del
proceso y posiblemente pueda agregar decenas de milisegundos a la solicitud. Las ventajas se derivan de
determinar que la información de perfil de usuario tarda más que eso, debido a que se necesitan realizar
consultas en la base de datos o agregar información de varios back-end.
El último paso del proceso consiste en actualizar la respuesta devuelta con la información de perfil de usuario.
Puede elegir incluir las comillas como parte del token para que incluso cuando no se produzca el reemplazo, la
respuesta siga siendo un JSON válido.
Una vez que se combinan todos estos pasos, el resultado final es una directiva similar a la siguiente.
<policies>
<inbound>
<!-- How you determine user identity is application dependent -->
<set-variable
name="enduserid"
value="@(context.Request.Headers.GetValueOrDefault("Authorization","").Split(' ')
[1].AsJwt()?.Subject)" />
<!-- If API Management doesn’t find it in the cache, make a request for it and store it -->
<choose>
<when condition="@(!context.Variables.ContainsKey("userprofile"))">
<!-- Make HTTP request to get user profile -->
<send-request
mode="new"
response-variable-name="userprofileresponse"
timeout="10"
ignore-error="true">
<!-- Build a URL that points to the profile for the current end-user -->
<set-url>@(new Uri(new Uri("https://apimairlineapi.azurewebsites.net/UserProfile/"),
(string)context.Variables["enduserid"]).AbsoluteUri)</set-url>
<set-method>GET</set-method>
</send-request>
Este enfoque de almacenamiento en caché se utiliza principalmente en los sitios web donde se compone HTML
en el servidor para que se pueda representar como una sola página. También puede ser útil en las API donde los
clientes no puedan realizar almacenamiento en caché de HTTP del lado cliente o sea deseable que la
responsabilidad no recaiga en el cliente.
Este mismo tipo de almacenamiento en caché también puede realizarse en los servidores web de back-end con
un servidor de Caché en Redis; sin embargo, el uso del servicio Administración de API para realizar este trabajo
resulta útil cuando los fragmentos en caché proceden de servidores back-end distintos a los de las respuestas
principales.
Después, API Management hace una búsqueda en la caché para ver si ya recuperó la versión de cliente deseada.
<cache-lookup-value
key="@("clientversion-" + context.Variables["clientid"])"
variable-name="clientversion" />
<choose>
<when condition="@(!context.Variables.ContainsKey("clientversion"))">
<send-request
mode="new"
response-variable-name="clientconfiguresponse"
timeout="10"
ignore-error="true">
<set-url>@(new Uri(new Uri(context.Api.ServiceUrl.ToString() + "api/ClientConfig/"),
(string)context.Variables["clientid"]).AbsoluteUri)</set-url>
<set-method>GET</set-method>
</send-request>
<set-variable
name="clientversion"
value="@(((IResponse)context.Variables["clientconfiguresponse"]).Body.As<string>())" />
<cache-store-value
key="@("clientversion-" + context.Variables["clientid"])"
value="@((string)context.Variables["clientversion"])"
duration="100000" />
Y finalmente actualizamos la dirección URL de back-end para seleccionar la versión del servicio requerido por el
cliente.
<set-backend-service
base-url="@(context.Api.ServiceUrl.ToString() + "api/" + (string)context.Variables["clientversion"] +
"/")" />
<inbound>
<base />
<set-variable name="clientid" value="@(context.Subscription.Key)" />
<cache-lookup-value key="@("clientversion-" + context.Variables["clientid"])" variable-
name="clientversion" />
<!-- If API Management doesn’t find it in the cache, make a request for it and store it -->
<choose>
<when condition="@(!context.Variables.ContainsKey("clientversion"))">
<send-request mode="new" response-variable-name="clientconfiguresponse" timeout="10" ignore-
error="true">
<set-url>@(new Uri(new Uri(context.Api.ServiceUrl.ToString() + "api/ClientConfig/"),
(string)context.Variables["clientid"]).AbsoluteUri)</set-url>
<set-method>GET</set-method>
</send-request>
<!-- Store response body in context variable -->
<set-variable name="clientversion"
value="@(((IResponse)context.Variables["clientconfiguresponse"]).Body.As<string>())" />
<!-- Store result in cache -->
<cache-store-value key="@("clientversion-" + context.Variables["clientid"])"
value="@((string)context.Variables["clientversion"])" duration="100000" />
</when>
</choose>
<set-backend-service base-url="@(context.Api.ServiceUrl.ToString() + "api/" +
(string)context.Variables["clientversion"] + "/")" />
</inbound>
Permitir a los consumidores de la API controlar de forma transparente la versión de back-end a la que acceden
los clientes sin tener que actualizar y volver a implementar los clientes es una solución elegante que soluciona
muchos problemas de control de versiones de la API.
Aislamiento de inquilinos
En implementaciones grandes multiinquilino algunas compañías crean grupos independientes de inquilinos en
distintas implementaciones del hardware de back-end. Esto minimiza el número de clientes que se ven afectados
por un problema de hardware en el back-end. También permite que nuevas versiones de software se
implementen en etapas. Lo ideal es que esta arquitectura de back-end sea transparente para los usuarios de las
API. Esto puede lograrse de manera similar con el control de versiones transparente porque se basa en la misma
técnica de manipular la dirección URL de back-end mediante el estado de configuración por clave de API.
En lugar de devolver una versión preferida de la API para cada clave de la suscripción, debe devolver un
identificador que relacione un inquilino con el grupo de hardware asignado. Este identificador se puede usar para
construir la dirección URL apropiada de back-end.
Resumen
La libertad de utilizar la caché de Administración de API de Azure para almacenar cualquier tipo de datos
permite un acceso eficaz a los datos de configuración, lo que puede afectar a la manera de procesar una solicitud
entrante. También puede usarse para almacenar fragmentos de datos que pueden aumentar las respuestas
devueltas desde una API de back-end.
Supervisión de las API con Azure API Management,
Event Hubs y Moesif
25/05/2018 • 26 minutes to read • Edit Online
El servicio Administración de API proporciona muchas capacidades para mejorar el procesamiento de solicitudes
de HTTP enviadas a la API HTTP. Sin embargo, la existencia de las solicitudes y respuestas es transitoria. Se realiza
la solicitud y fluye a través del servicio Administración de API a la API de back-end. La API procesa la solicitud y se
pasa una respuesta al consumidor de API. El servicio API Management mantiene algunas estadísticas importantes
acerca de las API que se muestran en el panel de Azure Portal, pero aparte de eso, los detalles desaparecen.
Mediante la directiva log-to-eventhub del servicio API Management, puede enviar los detalles de la solicitud y la
respuesta a un centro de eventos de Azure. Existen diversos motivos por los que puede desear generar eventos de
mensajes HTTP que se envían a las API. Algunos ejemplos incluyen traza de auditoría de las actualizaciones,
análisis de uso, alertas de excepción e integraciones de terceros.
Este artículo muestra cómo capturar el mensaje de solicitud y respuesta de HTTP completo, enviarlo a un centro
de eventos y, a continuación, retransmitir ese mensaje a un servicio que proporciona servicios de registro y
supervisión de HTTP.
Para poder crear este mensaje, se deben aprovechar las expresiones de directiva basadas en C# en Azure API
Management. A continuación se proporciona la directiva que envía un mensaje de solicitud HTTP a Azure Event
Hubs.
Declaración de directiva
Hay algunas cosas específicas que merece la pena mencionar acerca de esta expresión de directiva. La directiva
log-to-eventhub tiene un atributo denominado logger-id que hace referencia al nombre del registrador que se ha
creado en el servicio API Management. Los detalles de cómo configurar un registrador del centro de eventos en el
servicio API Management pueden encontrarse en el documento Cómo registrar eventos en Azure Event Hubs en
Azure API Management. El segundo atributo es un parámetro opcional que indica a Event Hubs en qué partición
almacenar el mensaje. Event Hubs usa particiones para habilitar la escalabilidad y requiere dos como mínimo. La
entrega ordenada de mensajes solo se garantiza dentro de una partición. Si no se indica al centro de eventos en
qué partición desea colocar el mensaje, usa un algoritmo round-robin para distribuir la carga. Sin embargo, eso
puede hacer que algunos de nuestros mensajes no se procesen en el orden correcto.
Particiones
Para garantizar que nuestros mensajes se entregan a los consumidores en orden y aprovechar la capacidad de
distribución de carga de las particiones, elegí enviar mensajes de solicitud de HTTP a una partición y los mensajes
de respuesta de HTTP a una segunda partición. Esto garantiza una distribución equilibrada de la carga y se puede
tener la seguridad de que todas las solicitudes y todas las respuestas se consumirán en orden. Es posible que una
respuesta se consuma antes de la solicitud correspondiente, pero como esto no es un problema porque tenemos
un mecanismo diferente para correlacionar las solicitudes a las respuestas y sabemos que las solicitudes van
siempre antes las respuestas.
Cargas de HTTP
Después de crear el valor requestLine , se comprueba si se debe truncar el cuerpo de la solicitud. El cuerpo de la
solicitud se trunca a solo 1024. Este valor podría aumentarse; sin embargo, los mensajes individuales del centro de
eventos están limitados a 256 KB, por lo que es probable que algunos cuerpos de los mensajes HTTP no quepan
en un único mensaje. Al realizar el registro y análisis, una cantidad significativa de información puede derivarse
simplemente de la línea de solicitud de HTTP y los encabezados. Además, muchas solicitudes de API devuelven
solo cuerpos pequeños, por lo que la pérdida de valor de la información debido al truncamiento de cuerpos
grandes es bastante mínima en comparación con la reducción de los costos de almacenamiento, transferencia y
transformación para mantener todo el contenido del cuerpo. Una nota final acerca del procesamiento del cuerpo
es que tenemos que pasar true al método As<string>() porque podemos leer el contenido del cuerpo, pero
queremos que la API de back-end pueda leerlo también. Al pasar true a este método, hacemos que el cuerpo se
almacene en la búfer para que se pueda leer una segunda vez. Es importante tenerlo en cuenta si tiene una API
que carga archivos grandes o usa el sondeo largo. En estos casos, es mejor evitar totalmente la lectura del cuerpo.
Encabezados HTTP
Los encabezados HTTP pueden transferirse al formato del mensaje con un formato simple de par clave/valor.
Hemos decidido eliminar ciertos campos de seguridad confidenciales para evitar la pérdida innecesaria de
información de credenciales. No es probable que se usen claves de API y otras credenciales para los análisis. Si
deseamos realizar el análisis en el usuario y el producto específico que usa, podríamos obtenerlo del objeto
context y agregarlo al mensaje.
Se podría haber creado el mensaje de solicitud, almacenarlo en una variable hasta que se devuelva la respuesta y,
después, simplemente enviar la solicitud y la respuesta como un solo mensaje. Sin embargo, al enviar la solicitud y
la respuesta de forma independiente y usar un identificador de mensaje para correlacionar las dos, obtenemos un
poco más flexibilidad en el tamaño de mensaje, la capacidad de aprovechar varias particiones al tiempo que se
mantiene el orden de los mensajes y la solicitud aparecerá antes en nuestro panel de registro. También puede
haber algunos escenarios donde nunca se envíe una respuesta válida al centro de eventos, posiblemente debido a
un error de solicitud irrecuperable en el servicio API Management, pero aún tendremos un registro de la solicitud.
La directiva para enviar el mensaje de respuesta HTTP es parecida a la solicitud; por tanto, la configuración de
directiva completa tiene el siguiente aspecto:
<policies>
<inbound>
<set-variable name="message-id" value="@(Guid.NewGuid())" />
<log-to-eventhub logger-id="conferencelogger" partition-id="0">
@{
var requestLine = string.Format("{0} {1} HTTP/1.1\r\n",
context.Request.Method,
context.Request.Url.Path +
context.Request.Url.QueryString);
La directiva set-variable crea un valor que sea accesible por la directiva log-to-eventhub en la sección
<inbound> y la sección <outbound> .
try
{
var httpMessage = HttpMessage.Parse(eventData.GetBodyStream());
await _MessageContentProcessor.ProcessHttpMessage(httpMessage);
}
catch (Exception ex)
{
_Logger.LogError(ex.Message);
}
}
... checkpointing code snipped ...
}
Se pasa una lista de objetos EventData al método y realizamos la iteración en esa lista. Se analizan los bytes de
cada método en un objeto HttpMessage y ese objeto se pasa a una instancia de IHttpMessageProcessor.
HttpMessage
La instancia HttpMessage contiene tres elementos de datos:
La instancia HttpMessage contiene un GUID MessageId que nos permite conectar la solicitud de HTTP a la
respuesta de HTTP correspondiente y un valor booleano que identifica si el objeto contiene una instancia de
HttpRequestMessage y HttpResponseMessage. Mediante las clases HTTP integradas de System.Net.Http , puede
aprovechar el código de análisis application/http que se incluye en System.Net.Http.Formatting .
IHttpMessageProcessor
La instancia HttpMessage se reenvía luego a la implementación de IHttpMessageProcessor , que es una interfaz que
se creó para desacoplar la recepción y la interpretación del evento del centro de eventos de Azure y el
procesamiento real de esta.
MoesifHttpMessageProcessor aprovecha las ventajas de una biblioteca de API en C# para Moesif que facilita la
inserción de datos de eventos HTTP en su servicio. Para enviar datos HTTP a Collector API de Moesif, necesita una
cuenta y un identificador de aplicación. Para obtener el identificador de aplicación de Moesif, cree una cuenta en el
sitio web de Moesif y, luego, vaya al menú de la parte superior derecha -> App Setup (Configuración de
aplicación).
Ejemplo completo
El código fuente y las pruebas del ejemplo se encuentran en GitHub. Necesita un servicio API Management, un
centro de eventos conectado y una cuenta de almacenamiento para ejecutar el ejemplo por su cuenta.
El ejemplo es simplemente una aplicación de consola sencilla que realiza escuchas de eventos procedentes del
centro de eventos, los convierte en objetos EventRequestModel y EventResponseModel de Moesif y, luego, los
reenvía a Collector API de Moesif.
En la siguiente imagen animada, puede ver una solicitud realizada a una API en el portal para desarrolladores, la
aplicación de consola que muestra el mensaje que se recibe, procesa y reenvía y, a continuación, la solicitud y
respuesta que se muestran en la secuencia de eventos.
Resumen
El servicio Azure API Management proporciona un lugar ideal para capturar el tráfico HTTP hacia y desde la API.
Azure Event Hubs es una solución altamente escalable y de bajo costo para capturar ese tráfico y colocarlo en
sistemas de procesamiento secundario para registro, supervisión y otros análisis sofisticados. La conexión a
sistemas de supervisión de tráfico de terceros como Moesif se reduce a unas cuantas docenas de líneas de código.
Pasos siguientes
Obtenga más información acerca de Azure Event Hubs
Introducción a Azure Event Hubs
Recepción de mensajes con EventProcessorHost
Guía de programación de Event Hubs
Obtener más información acerca de la integración de API Management y Event Hubs
Cómo registrar eventos en Azure Event Hubs en Azure API Management
Referencia de entidad del registrador
referencia de la directiva log-to-eventhub
Limitación avanzada de solicitudes con Azure API
Management
25/05/2018 • 7 minutes to read • Edit Online
La posibilidad de limitar las solicitudes entrantes es un rol clave de Azure API Management. Ya sea mediante el
control de la velocidad de solicitudes o de las solicitudes y los datos totales transferidos, Administración de API
permite a los proveedores de API proteger sus API de uso indebido y crear valor para los diferentes niveles de
productos de API.
<rate-limit-by-key calls="10"
renewal-period="60"
counter-key="@(context.Request.IpAddress)" />
<quota-by-key calls="1000000"
bandwidth="10000"
renewal-period="2629800"
counter-key="@(context.Request.IpAddress)" />
Si todos los clientes en Internet utilizasen una única dirección IP, esta podría ser una forma eficaz de limitar el uso
por usuario. Pero es probable que varios usuarios compartan una única dirección IP pública debido a su acceso a
Internet a través de un dispositivo NAT. A pesar de esto, es posible que para las API que permiten el acceso no
autenticado, IpAddress sea la mejor opción.
En este ejemplo se muestra cómo extraer el encabezado de autorización, se convierte en objeto JWT y se usa el
firmante del token para identificar al usuario y usarlo como clave de limitación de velocidad. Si la identidad del
usuario se almacena en el JWT como una de las otras notificaciones, ese valor podría usarse en su lugar.
Directivas de combinación
Aunque las nuevas directivas de limitación proporcionan más control que las directivas existentes de limitación,
sigue siendo útil combinar ambas capacidades. La limitación por clave de suscripción de producto (Limitar tarifa de
llamadas por suscripción y Establecer cuota de uso por suscripción) es una excelente manera de habilitar la
monetización de una API mediante el cobro por niveles de uso. El control más preciso de poder limitar por usuario
es complementario e impide que el comportamiento de un usuario degrade la experiencia de otro.
<rate-limit-by-key calls="100"
renewal-period="60"
counter-key="@(request.Headers.GetValueOrDefault("Rate-Key",""))"/>
Así se permite a la aplicación cliente del desarrollador elegir cómo se quiere crear la clave de limitación de
velocidad. Los desarrolladores del cliente pueden crear sus propios niveles de velocidad asignando conjuntos de
claves a los usuarios y rotando el uso de claves.
Resumen
Azure API Management ofrece limitación de velocidad y de cuota para proteger y agregar valor al servicio de API.
Las nuevas directivas de limitación con reglas de ámbito personalizadas permiten un control más preciso sobre las
directivas para permitir a los clientes crear aplicaciones aún mejores. Los ejemplos de este artículo muestran el uso
de estas nuevas directivas fabricando claves de limitación de velocidad con direcciones IP de cliente, identidad de
usuario y valores generados por el cliente. Pero hay muchas más partes del mensaje que podrían usarse como, por
ejemplo, agente de usuario, fragmentos de ruta de dirección URL, tamaño del mensaje.
Pasos siguientes
Háganos sus comentarios en la conversación Disqus sobre este tema. Sería estupendo conocer otros posibles
valores de clave que hayan sido una elección lógica en sus escenarios.
Uso de servicios externos del servicio de
administración de API de Azure
25/05/2018 • 15 minutes to read • Edit Online
Las directivas disponibles en el servicio Azure API Management pueden llevar a cabo una gran variedad de trabajo
útil basado exclusivamente en la solicitud entrante, la respuesta saliente y la información de configuración básica.
Pero la interacción con servicios externos de las directivas de API Management brinda muchas más oportunidades.
Anteriormente ha visto cómo interactuar con el servicio del Centro de eventos de Azure con fines de registro,
supervisión y análisis. En este artículo encontrará las directivas que permiten interactuar con cualquier servicio
externo basado en HTTP. Dichas directivas se pueden usar para desencadenar eventos remotos o recuperar
información que se utiliza para manipular en cierto modo la solicitud y la respuesta originales.
Send-One-Way-Request
Es posible que la interacción externa más sencilla sea el estilo de fire and forget de solicitud que permite que se
notifique a un servicio externo de algún tipo de evento importante. La directiva de flujo de control choose puede
utilizarse para detectar cualquier tipo de condición que le interese. Si se cumple la condición, puede hacer una
solicitud HTTP externa usando la directiva Envío de solicitud unidireccional. Podría tratarse de una solicitud para un
sistema de mensajería como Hipchat o Slack o una API de Correo como SendGrid o MailChimp, o bien para
incidentes de soporte técnico críticos como PagerDuty. Todos estos sistemas de mensajería tienen API HTTP
sencillas que se pueden invocar.
Alerta con Slack
En el siguiente ejemplo puede ver cómo enviar un mensaje a un salón de chat de Slack si el código de estado de
respuesta HTTP es mayor o igual que 500. Un error de intervalo 500 indica un problema con la API de back-end
cuyo cliente no puede resolver por sí mismo. Normalmente requiere algún tipo de intervención por parte de API
Management.
<choose>
<when condition="@(context.Response.StatusCode >= 500)">
<send-one-way-request mode="new">
<set-url>https://hooks.slack.com/services/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</set-url>
<set-method>POST</set-method>
<set-body>@{
return new JObject(
new JProperty("username","APIM Alert"),
new JProperty("icon_emoji", ":ghost:"),
new JProperty("text", String.Format("{0} {1}\nHost: {2}\n{3} {4}\n User: {5}",
context.Request.Method,
context.Request.Url.Path + context.Request.Url.QueryString,
context.Request.Url.Host,
context.Response.StatusCode,
context.Response.StatusReason,
context.User.Email
))
).ToString();
}</set-body>
</send-one-way-request>
</when>
</choose>
Slack tiene la noción de enlaces web entrantes. Al configurar un webhook entrante, Slack genera una dirección
URL especial que permite hacer una sencilla solicitud POST y pasar un mensaje al canal de Slack. El cuerpo JSON
creado se basa en un formato definido por Slack.
send-request
La directiva send-request permite usar un servicio externo para realizar funciones complejas de procesamiento y
devolver datos al servicio de Administración de API que pueden usarse para un posterior procesamiento de
directivas.
Autorización de tokens de referencia
Una de las funciones principales de API Management es proteger los recursos de back-end. Si el servidor de
autorización que usa su API crea tokens de JWT como parte de su flujo de OAuth2, igual que hace Azure Active
Directory, puede usar la directiva validate-jwt para comprobar la validez del token. Algunos servidores de
autorización crean lo que se denomina tokens de referencia, que no se pueden verificar sin realizar una devolución
de llamada al servidor de autorización.
Introspección estandarizada
En el pasado, no existía ninguna forma estandarizada de verificar un token de referencia con un servidor de
autorización. Pero IETF publicó un estándar propuesto recientemente, RFC 7662 , que define cómo un servidor de
recursos puede comprobar la validez de un token.
Extracción del token
El primer paso es extraer el token del encabezado de autorización. El formato del valor de encabezado debe constar
del esquema de autorización Bearer , un solo espacio y el token de autorización según RFC 6750.
Desafortunadamente, hay casos donde se omite el esquema de autorización. Para tener esto en cuenta durante el
análisis, API Management divide el valor de encabezado en un espacio y selecciona la última cadena de la matriz
de cadenas devuelta. Esto proporciona una solución alternativa para los encabezados de autorización con formato
incorrecto.
Comprobación de la respuesta
El atributo response-variable-name sirve para proporcionar acceso a la respuesta devuelta. El nombre definido en
esta propiedad se puede usar como clave en el diccionario context.Variables para acceder al objeto IResponse .
En el objeto de respuesta, puede recuperar el cuerpo, y RFC 7622 indica a API Management que la respuesta debe
ser un objeto JSON que contenga al menos una propiedad denominada active , que es un valor booleano.
Cuando active es true, el token se considera válido.
Notificación de error
Puede usar una directiva <choose> para detectar si el token no es válido y, en caso de no serlo, devolver una
respuesta 401.
<choose>
<when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] ==
false)">
<return-response response-variable-name="existing response variable">
<set-status code="401" reason="Unauthorized" />
<set-header name="WWW-Authenticate" exists-action="override">
<value>Bearer error="invalid_token"</value>
</set-header>
</return-response>
</when>
</choose>
Según RFC 6750, que describe cómo se deben usar los tokens de bearer , API Management también devuelve un
encabezado WWW-Authenticate con la respuesta 401. WWW -Authenticate está pensado para indicar a un cliente
cómo crear una solicitud debidamente autorizada. Debido a la gran variedad de enfoques posibles con el marco
OAuth2, es difícil comunicar toda la información necesaria. Por fortuna, se están adoptando medidas para enseñar
a los clientes a autorizar debidamente las solicitudes a un servidor de recursos.
Solución final
Al final, obtendrá la siguiente directiva:
<inbound>
<!-- Extract Token from Authorization header parameter -->
<set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme
param").Split(' ').Last())" />
<!-- Send request to Token Server to validate token (see RFC 7662) -->
<send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
<set-url>https://microsoft-apiappec990ad4c76641c6aea22f566efc5a4e.azurewebsites.net/introspection</set-url>
<set-method>POST</set-method>
<set-header name="Authorization" exists-action="override">
<value>basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
</set-header>
<set-header name="Content-Type" exists-action="override">
<value>application/x-www-form-urlencoded</value>
</set-header>
<set-body>@($"token={(string)context.Variables["token"]}")</set-body>
</send-request>
<choose>
<!-- Check active property in response -->
<when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] ==
false)">
<!-- Return 401 Unauthorized with http-problem payload -->
<return-response response-variable-name="existing response variable">
<set-status code="401" reason="Unauthorized" />
<set-header name="WWW-Authenticate" exists-action="override">
<value>Bearer error="invalid_token"</value>
</set-header>
</return-response>
</when>
</choose>
<base />
</inbound>
Este ejemplo es solo uno de los muchos que hay sobre cómo puede usarse la directiva send-request para integrar
servicios externos útiles en el proceso de solicitudes y respuestas que fluyen a través del servicio de API
Management.
Composición de respuesta
La directiva send-request se puede emplear para mejorar una solicitud principal a un sistema de back-end, como
vio en el ejemplo anterior, o bien se puede usar como una sustitución íntegra de la llamada de back-end. Gracias a
esta técnica, puede compilar fácilmente recursos compuestos que se agregan desde varios sistemas diferentes.
Creación de un panel
A veces le gustaría exponer información existente en varios sistemas de back-end, por ejemplo, para realizar un
panel. Los KPI proceden de los distintos back-end, pero prefiere no proporcionarles acceso directo y sería mejor si
se pudiera recuperar toda la información en una única solicitud. Es posible que parte de la información de back-
end deba segmentarse, desglosarse y corregirse un poco primero. Poder almacenar en caché ese recurso
compuesto sería útil para reducir la carga de back-end, pues ya sabe que los usuarios tienen la costumbre de
recurrir a la tecla F5 para ver si pueden cambiar sus métricas de déficit de rendimiento.
Emulación del recurso
El primer paso para crear el recurso del panel es configurar una nueva operación en Azure Portal. Se trata de una
operación de marcador de posición usada para configurar una directiva de composición a fin de compilar el
recurso dinámico.
Realización de las solicitudes
Una vez creada la operación,puede configurar una directiva para esa operación en concreto.
El primer paso consiste en extraer los parámetros de consulta de la solicitud entrante, de modo que pueda
reenviarlos al back-end. En este ejemplo, el panel muestra información basada en un período de tiempo y, por
tanto, tiene los parámetros fromDate y toDate . Puede usar la directiva set-variable para extraer la información
de la dirección URL de la solicitud.
Una vez que tiene esta información, puede realizar solicitudes a todos los sistemas de back-end. Cada solicitud
construye una nueva dirección URL con la información de los parámetros y llama a su servidor correspondiente y
almacena la respuesta en una variable de contexto.
<send-request mode="new" response-variable-name="revenuedata" timeout="20" ignore-error="true">
<set-url>@($"https://accounting.acme.com/salesdata?from={(string)context.Variables["fromDate"]}&to=
{(string)context.Variables["fromDate"]}")"</set-url>
<set-method>GET</set-method>
</send-request>
En la configuración de la operación del marcador de posición, puede establecer el recurso del panel para que se
almacene en caché durante al menos una hora.
Resumen
El servicio de administración de API de Azure proporciona directivas flexibles que se pueden aplicar de forma
selectiva al tráfico HTTP y permite la composición de servicios de back-end. Si desea mejorar la puerta de enlace
de la API con funciones de alerta, comprobación, capacidades de validación o crear nuevos recursos compuestos
basados en varios servicios de back-end, la directiva send-request y otras relacionadas ofrecen todo un mundo de
posibilidades.
Cómo usar valores con nombre en las directivas de
Azure API Management
25/05/2018 • 8 minutes to read • Edit Online
En API Management, las directivas constituyen una funcionalidad eficaz del sistema que permite a Azure Portal
cambiar el comportamiento de la API mediante la configuración. Las directivas son una colección de declaraciones
que se ejecutan secuencialmente en la solicitud o respuesta de una API. Las instrucciones de las directivas se
pueden crear con valores de texto literal, expresiones de directiva y valores con nombre.
Cada instancia del servicio de API Management tiene una colección de propiedades de pares clave-valor, que se
denominan valores con nombre y que son globales para la instancia del servicio. Estos valores con nombre se
pueden usar para administrar valores de cadena constantes en todas las directivas y la configuración de API. Cada
propiedad puede tener también los siguientes atributos:
Los valores de propiedad pueden contener cadenas literales y expresiones de directiva. Por ejemplo, el valor de
ExpressionProperty es una expresión de directiva que devuelve una cadena que contiene la fecha y la hora
actuales. La propiedad ContosoHeaderValue está marcada como secreta, por lo que no se muestra su valor.
IMPORTANT
Si se hace referencia a la propiedad mediante alguna directiva, podrá eliminarla correctamente hasta que quite la propiedad
de todas las directivas que la utilicen.
Para obtener información sobre cómo eliminar una propiedad mediante la API de REST, consulte Delete a
property using the REST API(Eliminación de una propiedad mediante la API de REST).
En este ejemplo, ContosoHeader se utiliza como el nombre de un encabezado en una directiva set-header , y
ContosoHeaderValue se utiliza como valor de ese encabezado. Cuando esta directiva se evalúa durante una solicitud
o responde a la pasarela de API Management, {{ContosoHeader}} y {{ContosoHeaderValue}} se reemplazan por
sus respectivos valores de propiedad.
Los valores con nombre se pueden utilizar como atributo completo o como valores de elemento (tal como se
muestra en el ejemplo anterior), pero también se pueden insertar o combinar con parte de una expresión de texto
literal, como en el ejemplo siguiente: <set-header name = "CustomHeader{{ContosoHeader}}" ...>
Los valores con nombre también pueden contener expresiones de directiva. En el ejemplo siguiente, se utiliza la
propiedad ExpressionProperty .
Aunque los valores de propiedad pueden contener expresiones de directiva, no pueden contener otros valores con
nombre. Si se utiliza texto que contiene una referencia de propiedad para un valor de propiedad, como
Property value text {{MyProperty}} , esa referencia de propiedad no se reemplazará y se incluirá como parte del
valor de la propiedad.
Pasos siguientes
Obtenga más información sobre cómo trabajar con directivas
Directivas de Azure API Management
Referencia de directiva
Expresiones de directiva
Directivas de restricción de acceso de API
Management
25/07/2019 • 29 minutes to read • Edit Online
En este tema se proporciona una referencia para las siguientes directivas de API Management. Para obtener más
información sobre cómo agregar y configurar directivas, consulte Directivas en Administración de API.
Ejemplo
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante y saliente
Ámbitos de la directiva: global, producto, API, operación
Cau t i on
Ejemplo
<policies>
<inbound>
<base />
<rate-limit calls="20" renewal-period="90" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: producto
La directiva rate-limit-by-key evita los picos de uso de la API según clave limitando la tasa de llamadas a un
número especificado por un período de tiempo establecido. La clave puede tener un valor de cadena arbitrario y
normalmente se proporciona mediante una expresión de directiva. Puede agregarse una condición de incremento
opcional para especificar qué solicitudes se deben contar para este límite. Cuando se desencadena esta directiva, el
autor de la llamada recibe un código de estado de respuesta 429 Too Many Requests .
Para obtener más información y ver ejemplos de esta directiva, consulte Limitación avanzada de solicitudes con
Azure API Management.
Cau t i on
<rate-limit-by-key calls="number"
renewal-period="seconds"
increment-condition="condition"
counter-key="key value" />
Ejemplo
En el ejemplo siguiente, la clave del límite de velocidad se establece según la dirección IP del autor de la llamada.
<policies>
<inbound>
<base />
<rate-limit-by-key calls="10"
renewal-period="60"
increment-condition="@(context.Response.StatusCode == 200)"
counter-key="@(context.Request.IpAddress)"/>
</inbound>
<outbound>
<base />
</outbound>
</policies>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante
Ámbitos de la directiva: global, producto, API, operación
Ejemplo
En el siguiente ejemplo, la directiva solo permite solicitudes provenientes de la única dirección IP o rango de
direcciones IP especificadas.
<ip-filter action="allow">
<address>13.66.201.169</address>
<address-range from="13.66.140.128" to="13.66.140.143" />
</ip-filter>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante
Ámbitos de la directiva: global, producto, API, operación
Instrucción de la directiva
Ejemplo
<policies>
<inbound>
<base />
<quota calls="10000" bandwidth="40000" renewal-period="3600" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: producto
La directiva quota-by-key aplica un volumen de llamadas o una cuota de ancho de banda por clave renovables o
permanentes. La clave puede tener un valor de cadena arbitrario y normalmente se proporciona mediante una
expresión de directiva. Puede agregarse una condición de incremento opcional para especificar qué solicitudes se
cuentan para esta cuota. Si varias directivas incrementan el mismo valor de clave, se incrementa solo una vez por
solicitud. Cuando se alcanza el límite de llamadas, el autor de la llamada recibe un código de estado de respuesta
403 Forbidden .
Para obtener más información y ver ejemplos de esta directiva, consulte Limitación avanzada de solicitudes con
Azure API Management.
Instrucción de la directiva
<quota-by-key calls="number"
bandwidth="kilobytes"
renewal-period="seconds"
increment-condition="condition"
counter-key="key value" />
Ejemplo
En el ejemplo siguiente, la clave de la cuota se establece según la dirección IP del autor de la llamada.
<policies>
<inbound>
<base />
<quota-by-key calls="10000" bandwidth="40000" renewal-period="3600"
increment-condition="@(context.Response.StatusCode >= 200 && context.Response.StatusCode
< 400)"
counter-key="@(context.Request.IpAddress)" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante
Ámbitos de la directiva: global, producto, API, operación
Validación de JWT
La directiva validate-jwt aplica la existencia y la validez de un JWT extraído de un encabezado HTTP o un
parámetro de consulta especificados.
IMPORTANT
La directiva validate-jwt requiere que la notificación registrada exp se incluya en el token de JWT, a menos que se
especifique el atributo require-expiration-time y se establezca en false . La directiva validate-jwt es compatible con
los algoritmos de firma HS256 y RS256. En el caso de HS256, la clave debe proporcionarse en línea dentro de la directiva con
el formato de codificación Base64. En el caso de RS256, la clave debe proporcionarse a través de un punto de conexión de
configuración OpenID. La directiva validate-jwt admite tokens cifrados con claves simétricas que utilicen los siguientes
algoritmos de cifrado: A128CBC-HS256, A192CBC-HS384 y A256CBC-HS512.
Instrucción de la directiva
<validate-jwt
header-name="name of http header containing the token (use query-parameter-name attribute if the token is
passed in the URL)"
failed-validation-httpcode="http status code to return on failure"
failed-validation-error-message="error message to return on failure"
token-value="expression returning JWT token as a string"
require-expiration-time="true|false"
require-scheme="scheme"
require-signed-tokens="true|false"
clock-skew="allowed clock skew in seconds"
output-token-variable-name="name of a variable to receive a JWT object representing successfully validated
token">
<issuer-signing-keys>
<key>base64 encoded signing key</key>
<!-- if there are multiple keys, then add additional key elements -->
</issuer-signing-keys>
<decryption-keys>
<key>base64 encoded signing key</key>
<!-- if there are multiple keys, then add additional key elements -->
</decryption-keys>
<audiences>
<audience>audience string</audience>
<!-- if there are multiple possible audiences, then add additional audience elements -->
</audiences>
<issuers>
<issuer>issuer string</issuer>
<!-- if there are multiple possible issuers, then add additional issuer elements -->
</issuers>
<required-claims>
<claim name="name of the claim as it appears in the token" match="all|any" separator="separator character
in a multi-valued claim">
<value>claim value as it is expected to appear in the token</value>
<!-- if there is more than one allowed values, then add additional value elements -->
</claim>
<!-- if there are multiple possible allowed values, then add additional value elements -->
</required-claims>
<openid-config url="full URL of the configuration endpoint, e.g. https://login.constoso.com/openid-
configuration" />
<zumo-master-key id="key identifier">key value</zumo-master-key>
</validate-jwt>
Ejemplos
Validación de tokens simple
<validate-jwt header-name="Authorization" require-scheme="Bearer">
<issuer-signing-keys>
<key>{{jwt-signing-key}}</key> <!-- signing key specified as a named value -->
</issuer-signing-keys>
<audiences>
<audience>@(context.Request.OriginalUrl.Host)</audience> <!-- audience is set to API Management host
name -->
</audiences>
<issuers>
<issuer>http://contoso.com/</issuer>
</issuers>
</validate-jwt>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
nombre del parámetro de Nombre del parámetro de Se debe especificar uno de N/D
consulta consulta que contiene el header-name ,
token. query-parameter-name o
token-value .
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante
Ámbitos de la directiva: global, producto, API, operación
Pasos siguientes
Para obtener más información sobre cómo trabajar con directivas, consulte:
Directivas de Azure API Management
API de transformación
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su configuración
Ejemplos de directivas
Directivas avanzadas de API Management
23/07/2019 • 41 minutes to read • Edit Online
En este tema se proporciona una referencia para las siguientes directivas de API Management. Para obtener más
información sobre cómo agregar y configurar directivas, consulte Directivas en Administración de API.
Directivas avanzadas
Flujo de control: aplica condicionalmente instrucciones de directiva basadas en los resultados de la evaluación
de expresiones booleanas.
Reenviar solicitud : reenvía la solicitud al servicio back-end.
Limitar la simultaneidad: evita que las directivas delimitadas las ejecute simultáneamente un número de
solicitudes mayor que el especificado.
Registro en centro de eventos: envía mensajes en el formato especificado a un centro de eventos definido por
una entidad de registrador.
Mock response (Simular respuesta): anula la ejecución de la canalización y devuelve la respuesta ficticia
directamente al llamador.
Reintentar : reintenta ejecutar las instrucciones de directiva adjuntas, si y hasta que se cumple la condición. La
ejecución se repite en los intervalos de tiempo especificados y hasta el número de reintentos indicado.
Devolver respuesta : anula la ejecución de la canalización y devuelve la respuesta especificada directamente al
llamador.
Enviar solicitud unidireccional : envía una solicitud a la dirección URL especificada sin esperar una respuesta.
Enviar solicitud : envía una solicitud a la dirección URL especificada.
Establecer el proxy HTTP: permite enrutar las solicitudes reenviadas a través de un proxy HTTP.
Establecer método de solicitud : le permite cambiar el método HTTP de una solicitud.
Establecimiento de código de estado: cambia el código de estado HTTP al valor especificado.
Establecimiento de variable: conserva un valor en una variable context con nombre para su posterior acceso.
Seguimiento: agrega una cadena a la salida de API Inspector.
Espera: espera a que se completen las directivas adjuntas de envío de solicitud, obtención del valor de caché o
flujo de control antes de continuar.
Flujo de control
La directiva choose aplica las declaraciones de directiva adjuntas en función del resultado de la evaluación de las
expresiones booleanas, de forma similar a una estructura if-then-else o de conmutador en un lenguaje de
programación.
Declaración de la directiva
<choose>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<when condition="Boolean expression | Boolean constant">
<!— one or more policy statements to be applied if the above condition is true -->
</when>
<otherwise>
<!— one or more policy statements to be applied if none of the above conditions are true -->
</otherwise>
</choose>
La directiva de flujo de control debe contener al menos un elemento <when/> . El elemento <otherwise/> es
opcional. Las condiciones de los elementos <when/> se evalúan en orden de aparición dentro de la directiva. Se
aplicarán las declaraciones de directivas adjuntas en el primer elemento <when/> cuyo atributo de condición sea
igual a true . Las directivas incluidas dentro del elemento <otherwise/> , si está presente, se aplicarán si todos los
atributos de condición del elemento <when/> son false .
Ejemplos
Ejemplo
En el ejemplo siguiente se muestra una directiva set-variable y dos directivas de flujo de control.
La directiva de establecimiento de variable se encuentra en la sección de entrada y crea una variable de contexto
booleana isMobile que se establece en true si el encabezado de la solicitud User-Agent contiene el texto iPad o
iPhone .
La primera directiva de flujo de control se encuentra también en la sección de entrada y aplica condicionalmente
una de las dos directivas de establecimiento del parámetro de cadena de consulta dependiendo del valor de la
variable de contexto isMobile .
La segunda directiva de flujo de control se encuentra en la sección de salida y aplica la directiva de onversión de
XML a JSON solo cuando isMobile está establecida en true .
<policies>
<inbound>
<set-variable name="isMobile" value="@(context.Request.Headers["User-Agent"].Contains("iPad") ||
context.Request.Headers["User-Agent"].Contains("iPhone"))" />
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<bool>("isMobile"))">
<set-query-parameter name="mobile" exists-action="override">
<value>true</value>
</set-query-parameter>
</when>
<otherwise>
<set-query-parameter name="mobile" exists-action="override">
<value>false</value>
</set-query-parameter>
</otherwise>
</choose>
</inbound>
<outbound>
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<bool>("isMobile"))">
<xml-to-json kind="direct" apply="always" consider-accept-header="false"/>
</when>
</choose>
</outbound>
</policies>
Ejemplo
En este ejemplo se muestra cómo filtrar contenido quitando elementos de datos de la respuesta recibida del
servicio back-end al usar el producto Starter . Para ver una demostración de la configuración y el uso de esta
directiva, consulte el Episodio 177 de Cloud Cover: More API Management Features with Vlad Vinogradsky (Más
características de API Management con Vlad Vinogradsky) y avance hasta el minuto 34:30. Empiece en el minuto
31:50 para ver una introducción a la API de previsión de Dark Sky empleada en esta demostración.
<!-- Copy this snippet into the outbound section to remove a number of data elements from the response received
from the backend service based on the name of the api product -->
<choose>
<when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
<set-body>@{
var response = context.Response.Body.As<JObject>();
foreach (var key in new [] {"minutely", "hourly", "daily", "flags"}) {
response.Property (key).Remove ();
}
return response.ToString();
}
</set-body>
</when>
</choose>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Reenvío de solicitud
La directiva forward-request reenvía la solicitud entrante al servicio back-end especificado en el contexto de la
solicitud. La dirección URL del servicio back-end se especifica en la configuración de la API y se puede cambiar
mediante la directiva de establecimiento del servicio back-end.
NOTE
Si quita los resultados de esta directiva en la solicitud no se reenviarán al servicio back-end, y las directivas de la sección de
salida se evaluarán inmediatamente tras la finalización correcta de las directivas en la sección de entrada.
Instrucción de la directiva
Ejemplos
Ejemplo
La siguiente directiva de nivel de API reenvía todas las solicitudes de API al servicio back-end con un intervalo de
tiempo de expiración de 60 segundos.
Ejemplo
Esta directiva de nivel de operación utiliza el elemento base para heredar la directiva de back-end del ámbito de
nivel de API principal.
Ejemplo
Esta directiva de nivel de operación reenvía explícitamente todas las solicitudes al servicio back-end con un tiempo
de espera de 120 y no hereda la directiva de back-end de nivel de API principal.
<!-- operation level -->
<policies>
<inbound>
<base/>
</inbound>
<backend>
<forward-request timeout="120"/>
<!-- effective policy. note the absence of <base/> -->
</backend>
<outbound>
<base/>
</outbound>
</policies>
Ejemplo
Esta directiva de nivel de operación no reenvía solicitudes al servicio back-end.
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: back-end
Ámbitos de la directiva: todos los ámbitos
Limitar la simultaneidad
La directiva limit-concurrency evita que las directivas delimitadas ejecuten en un momento dado un número de
solicitudes mayor que el especificado. Al superar ese número, las nuevas solicitudes producirán un error
inmediatamente con el código de estado de 429 Demasiadas solicitudes.
Declaración de la directiva
Ejemplos
Ejemplo
En el ejemplo siguiente se muestra cómo limitar el número de solicitudes que se reenvían a un back-end en
función del valor de una variable de contexto.
<policies>
<inbound>…</inbound>
<backend>
<limit-concurrency key="@((string)context.Variables["connectionId"])" max-count="3">
<forward-request timeout="120"/>
<limit-concurrency/>
</backend>
<outbound>…</outbound>
</policies>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
NOTE
Para obtener una guía paso a paso acerca de cómo configurar un centro de eventos y eventos de registro, consulte Cómo
registrar eventos de API Management con Azure Event Hubs.
Instrucción de la directiva
<log-to-eventhub logger-id="id of the logger entity" partition-id="index of the partition where messages are
sent" partition-key="value used for partition assignment">
Expression returning a string to be logged
</log-to-eventhub>
Ejemplo
Puede utilizar cualquier cadena como valor que se registrará en Event Hubs. En este ejemplo, la fecha y hora, el
nombre del servicio de implementación, el identificador de solicitud, la dirección IP y el nombre de la operación de
todas las llamadas entrantes se registran en el registrador del centro de eventos con el identificador
contoso-logger .
<policies>
<inbound>
<log-to-eventhub logger-id ='contoso-logger'>
@( string.Join(",", DateTime.UtcNow, context.Deployment.ServiceName, context.RequestId,
context.Request.IpAddress, context.Operation.Name) )
</log-to-eventhub>
</inbound>
<outbound>
</outbound>
</policies>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Similar respuesta
mock-response , como el nombre indica, se utiliza para simular las API y las operaciones. Se anula la ejecución de la
canalización normal y devuelve una respuesta simulada al llamador. La directiva siempre trata de devolver las
respuestas de mayor fidelidad. Prefiere ejemplos de contenido de respuesta, siempre que estén disponibles.
Genera las respuestas de ejemplo a partir de esquemas, cuando se proporcionan esquemas y no ejemplos. Si no se
encuentran ni ejemplos ni esquemas, se devuelven las respuestas sin contenido.
Instrucción de la directiva
Ejemplos
<!-- Returns 200 OK status code. Content is based on an example or schema, if provided for this
status code. First found content type is used. If no example or schema is found, the content is empty. -->
<mock-response/>
<!-- Returns 200 OK status code. Content is based on an example or schema, if provided for this
status code and media type. If no example or schema found, the content is empty. -->
<mock-response status-code='200' content-type='application/json'/>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante, saliente y en caso de error
Ámbitos de la directiva: todos los ámbitos
Reintento
La directiva retry ejecuta sus directivas secundarias una vez y después vuelve a tratar de ejecutarla hasta que el
elemento condition del reintento pasa a ser false o se agota el número correspondiente al elemento count del
reintento.
Instrucción de la directiva
<retry
condition="boolean expression or literal"
count="number of retry attempts"
interval="retry interval in seconds"
max-interval="maximum retry interval in seconds"
delta="retry interval delta in seconds"
first-fast-retry="boolean expression or literal">
<!-- One or more child policies. No restrictions -->
</retry>
Ejemplo
En el siguiente ejemplo de solicitud, el reenvío de solicitud se vuelve a intentar hasta diez veces usando un
algoritmo exponencial de reintentos. Como first-fast-retry se ha establecido en false, todos los reintentos
quedan sujetos al algoritmo exponencial de reintentos.
<retry
condition="@(context.Response.StatusCode == 500)"
count="10"
interval="10"
max-interval="100"
delta="10"
first-fast-retry="false">
<forward-request buffer-request-body="true" />
</retry>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva. Tenga en cuenta que esta directiva
heredará las restricciones de uso de directivas secundarias.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Devolución de respuesta
La directiva return-response anula la ejecución de la canalización y devuelve una respuesta personalizada o
predeterminada al autor de la llamada. La respuesta predeterminada es 200 OK sin cuerpo. La respuesta
personalizada se puede especificar mediante declaraciones de directiva o variable de contexto. Cuando se
especifican ambas, las declaraciones de la directiva modifican la respuesta que se encuentra en la variable de
contexto antes de devolverla al autor de la llamada.
Instrucción de la directiva
Ejemplo
<return-response>
<set-status code="401" reason="Unauthorized"/>
<set-header name="WWW-Authenticate" exists-action="override">
<value>Bearer error="invalid_token"</value>
</set-header>
</return-response>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Ejemplo
Esto es un ejemplo de cómo usar la directiva send-one-way-request para enviar un mensaje a un salón de chat de
Slack cuando el código de respuesta HTTP es mayor o igual que 500. Si desea más información sobre este
ejemplo, consulte Uso de servicios externos del servicio Azure API Management.
<choose>
<when condition="@(context.Response.StatusCode >= 500)">
<send-one-way-request mode="new">
<set-url>https://hooks.slack.com/services/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</set-url>
<set-method>POST</set-method>
<set-body>@{
return new JObject(
new JProperty("username","APIM Alert"),
new JProperty("icon_emoji", ":ghost:"),
new JProperty("text", String.Format("{0} {1}\nHost: {2}\n{3} {4}\n User: {5}",
context.Request.Method,
context.Request.Url.Path + context.Request.Url.QueryString,
context.Request.Url.Host,
context.Response.StatusCode,
context.Response.StatusReason,
context.User.Email
))
).ToString();
}</set-body>
</send-one-way-request>
</when>
</choose>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Cuando se establece en
override , si se inscriben
varias entradas con el mismo
nombre, se establece el
encabezado de acuerdo con
todas ellas (que se
inscribirán varias veces); solo
los valores mostrados se
establecerán en el resultado.
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Envío de solicitud
La directiva send-request envía la solicitud proporcionada a la dirección URL que se ha especificado, aunque no
espera más del valor de tiempo de espera establecido.
Declaración de la directiva
Ejemplo
En este ejemplo se muestra una forma de comprobar un token de referencia con un servidor de autorización. Si
desea más información sobre este ejemplo, consulte Uso de servicios externos del servicio Azure API
Management.
<inbound>
<!-- Extract Token from Authorization header parameter -->
<set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme
param").Split(' ').Last())" />
<!-- Send request to Token Server to validate token (see RFC 7662) -->
<send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
<set-url>https://microsoft-apiappec990ad4c76641c6aea22f566efc5a4e.azurewebsites.net/introspection</set-url>
<set-method>POST</set-method>
<set-header name="Authorization" exists-action="override">
<value>basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
</set-header>
<set-header name="Content-Type" exists-action="override">
<value>application/x-www-form-urlencoded</value>
</set-header>
<set-body>@($"token={(string)context.Variables["token"]}")</set-body>
</send-request>
<choose>
<!-- Check active property in response -->
<when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] ==
false)">
<!-- Return 401 Unauthorized with http-problem payload -->
<return-response>
<set-status code="401" reason="Unauthorized" />
<set-header name="WWW-Authenticate" exists-action="override">
<value>Bearer error="invalid_token"</value>
</set-header>
</return-response>
</when>
</choose>
<base />
</inbound>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
- Si se especificó response-
variable-name, contendrá un
valor nulo.
- Si no se especificó
response-variable-name, no
se actualizará
context.Request.
Cuando se establece en
override , si se inscriben
varias entradas con el mismo
nombre, se establece el
encabezado de acuerdo con
todas ellas (que se
inscribirán varias veces); solo
los valores mostrados se
establecerán en el resultado.
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Ejemplo
Observe el uso de propiedades como valores de nombre de usuario y contraseña para evitar almacenar
información confidencial en el documento de directiva.
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: todos los ámbitos
<set-method>METHOD</set-method>
Ejemplo
En este ejemplo, donde se usa la directiva set-method , se ilustra cómo enviar un mensaje a un salón de chat de
Slack cuando el código de respuesta HTTP es mayor o igual que 500. Si desea más información sobre este
ejemplo, consulte Uso de servicios externos del servicio Azure API Management.
<choose>
<when condition="@(context.Response.StatusCode >= 500)">
<send-one-way-request mode="new">
<set-url>https://hooks.slack.com/services/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</set-url>
<set-method>POST</set-method>
<set-body>@{
return new JObject(
new JProperty("username","APIM Alert"),
new JProperty("icon_emoji", ":ghost:"),
new JProperty("text", String.Format("{0} {1}\nHost: {2}\n{3} {4}\n User: {5}",
context.Request.Method,
context.Request.Url.Path + context.Request.Url.QueryString,
context.Request.Url.Host,
context.Response.StatusCode,
context.Response.StatusReason,
context.User.Email
))
).ToString();
}</set-body>
</send-one-way-request>
</when>
</choose>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante y en caso de error
Ámbitos de la directiva: todos los ámbitos
Ejemplo
En este ejemplo se muestra cómo devolver una respuesta 401 si el token de autorización no es válido. Si desea
más información, consulte Uso de servicios externos del servicio Azure API Management.
<choose>
<when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] ==
false)">
<return-response response-variable-name="existing response variable">
<set-status code="401" reason="Unauthorized" />
<set-header name="WWW-Authenticate" exists-action="override">
<value>Bearer error="invalid_token"</value>
</set-header>
</return-response>
</when>
</choose>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Establecimiento de variable
La directiva set-variable declara una variable de contexto y le asigna un valor que se especifica mediante una
expresión o un literal de cadena. Si la expresión contiene un valor literal, se convertirá en una cadena y el tipo del
valor será System.String .
Declaración de la directiva
Ejemplo
En el ejemplo siguiente se muestra una directiva de establecimiento de variable en la sección de entrada. Esta
directiva de establecimiento de variable crea una variable de contexto booleana de isMobile que se establece en
true si el encabezado de la solicitud User-Agent contiene el texto iPad o iPhone .
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Tipos permitidos
Las expresiones usadas en la directiva set-variable deben devolver uno de los siguientes tipos básicos.
System.Boolean
System.SByte
System.Byte
System.UInt16
System.UInt32
System.UInt64
System.Int16
System.Int32
System.Int64
System.Decimal
System.Single
System.Double
System.Guid
System.String
System.Char
System.DateTime
System.TimeSpan
System.Byte?
System.UInt16?
System.UInt32?
System.UInt64?
System.Int16?
System.Int32?
System.Int64?
System.Decimal?
System.Single?
System.Double?
System.Guid?
System.String?
System.Char?
System.DateTime?
Seguimiento
La directiva trace agrega una cadena a la salida de API Inspector. La directiva se ejecutará solamente cuando se
desencadena el seguimiento, es decir, cuando el encabezado de solicitud Ocp-Apim-Trace está presente y
establecido en true , y cuando el encabezado de solicitud Ocp-Apim-Subscription-Key está presente y contiene una
clave válida asociada a la cuenta de administrador.
Instrucción de la directiva
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Espera
La directiva wait ejecuta sus directivas secundarias inmediatas en paralelo y espera a que se completen todas o
una de ellas para finalizar. La directiva de espera puede tener las directivas de envío de solicitud, obtención del
valor de caché y flujo de control como directivas secundarias inmediatas.
Instrucción de la directiva
<wait for="all|any">
<!--Wait policy can contain send-request, cache-lookup-value,
and choose policies as child elements -->
</wait>
Ejemplo
En el ejemplo siguiente hay dos directivas choose que son directivas secundarias inmediatas de la directiva wait .
Cada una de estas directivas choose se ejecuta en paralelo. Cada directiva choose intenta recuperar un valor
almacenado en memoria caché. Si se produce un error de memoria caché, se llama a un servicio back-end para que
proporcione el valor. En este ejemplo la directiva wait no se completa hasta que lo han hecho todas sus directivas
secundarias inmediatas, ya que el atributo for está establecido en all . Las variables de contexto (
execute-branch-one , value-one , execute-branch-two y value-two ) quedan fuera del ámbito de esta directiva de
ejemplo.
<wait for="all">
<choose>
<when condition="@((bool)context.Variables["execute-branch-one="])">
<cache-lookup-value key="key-one" variable-name="value-one" />
<choose>
<when condition="@(!context.Variables.ContainsKey("value-one="))">
<send-request mode="new" response-variable-name="value-one">
<set-url>https://backend-one</set-url>
<set-method>GET</set-method>
</send-request>
</when>
</choose>
</when>
</choose>
<choose>
<when condition="@((bool)context.Variables["execute-branch-two="])">
<cache-lookup-value key="key-two" variable-name="value-two" />
<choose>
<when condition="@(!context.Variables.ContainsKey("value-two="))">
<send-request mode="new" response-variable-name="value-two">
<set-url>https://backend-two</set-url>
<set-method>GET</set-method>
</send-request>
</when>
</choose>
</when>
</choose>
</wait>
Elementos
ELEMENTO DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante, saliente y back-end
Ámbitos de la directiva: todos los ámbitos
Pasos siguientes
Para obtener más información sobre cómo trabajar con directivas, consulte:
Directivas de Azure API Management
Expresiones de directiva
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su configuración
Ejemplos de directivas
Directivas de autenticación de Azure API
Management
26/07/2019 • 4 minutes to read • Edit Online
En este tema se proporciona una referencia para las siguientes directivas de API Management. Para obtener más
información sobre cómo agregar y configurar directivas, consulte Directivas en Administración de API.
Directivas de autenticación
Autenticar con opción básica : autenticar con un servicio de back-end mediante la autenticación básica.
Autenticar con certificado de cliente : autenticar con un servicio de back-end mediante certificados de
cliente.
Autenticar con identidad administrada: autenticar con una identidad administrada para el servicio API
Management.
Ejemplo
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: todos los ámbitos
Autenticación Básica
Use la directiva authentication-certificate para realizar la autenticación con un servicio de back-end mediante un
certificado de cliente. El certificado se debe instalar primero en API Management y se identifica mediante su huella
digital.
Instrucción de la directiva
Ejemplos
En este ejemplo, el certificado de cliente se identifica mediante su huella digital.
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: todos los ámbitos
Ejemplo
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: todos los ámbitos
Pasos siguientes
Para obtener más información sobre cómo trabajar con directivas, consulte:
Directivas de Azure API Management
API de transformación
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su configuración
Ejemplos de directivas
Directivas de almacenamiento en caché de API
Management
26/07/2019 • 16 minutes to read • Edit Online
En este tema se proporciona una referencia para las siguientes directivas de API Management. Para obtener más
información sobre cómo agregar y configurar directivas, consulte Directivas en Administración de API.
NOTE
Esta directiva debe tener una directiva Store to cache (Almacenar en la caché) correspondiente.
Instrucción de la directiva
Ejemplos
Ejemplo
<policies>
<inbound>
<base />
<cache-lookup vary-by-developer="false" vary-by-developer-groups="false" downstream-caching-
type="none" must-revalidate="true" caching-type="internal" >
<vary-by-query-parameter>version</vary-by-query-parameter>
</cache-lookup>
</inbound>
<outbound>
<cache-store duration="seconds" />
<base />
</outbound>
</policies>
<!-- The following cache policy snippets demonstrate how to control API Management response cache duration
with Cache-Control headers sent by the backend service. -->
<!-- Copy this snippet into the outbound section. Note that cache duration is set to the max-age value
provided in the Cache-Control header received from the backend service or to the default value of 5 min if
none is found -->
<cache-store duration="@{
var header = context.Response.Headers.GetValueOrDefault("Cache-Control","");
var maxAge = Regex.Match(header, @"max-age=(?<maxAge>\d+)").Groups["maxAge"]?.Value;
return (!string.IsNullOrEmpty(maxAge))?int.Parse(maxAge):300;
}"
/>
Para obtener más información, consulte Policy expressions (Expresiones de política) y Context variable (Variable
de contexto).
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
- none: no se permite el
almacenamiento en caché
de bajada.
- private: se permite el
almacenamiento en caché
de bajada privado.
- public: se permite el
almacenamiento en caché
de bajada privado y
compartido.
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: todos los ámbitos
NOTE
Esta directiva debe tener una directiva Get from cache correspondiente.
Instrucción de la directiva
Ejemplos
Ejemplo
<policies>
<inbound>
<base />
<cache-lookup vary-by-developer="true | false" vary-by-developer-groups="true | false" downstream-
caching-type="none | private | public" must-revalidate="true | false">
<vary-by-query-parameter>parameter name</vary-by-query-parameter> <!-- optional, can repeated
several times -->
</cache-lookup>
</inbound>
<outbound>
<base />
<cache-store duration="3600" />
</outbound>
</policies>
<!-- The following cache policy snippets demonstrate how to control API Management response cache duration
with Cache-Control headers sent by the backend service. -->
<!-- Copy this snippet into the outbound section. Note that cache duration is set to the max-age value
provided in the Cache-Control header received from the backend service or to the default value of 5 min if
none is found -->
<cache-store duration="@{
var header = context.Response.Headers.GetValueOrDefault("Cache-Control","");
var maxAge = Regex.Match(header, @"max-age=(?<maxAge>\d+)").Groups["maxAge"]?.Value;
return (!string.IsNullOrEmpty(maxAge))?int.Parse(maxAge):300;
}"
/>
Para obtener más información, consulte Policy expressions (Expresiones de política) y Context variable (Variable
de contexto).
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de las directivas.
Secciones de la directiva: outbound
Ámbitos de la directiva: todos los ámbitos
NOTE
Esta directiva debe tener una directiva Store value in cache (Almacenar valor en la caché) correspondiente.
Instrucción de la directiva
Ejemplo
Para más información y ver ejemplos de esta directiva, consulte Custom caching in Azure API Management
(Almacenamiento en caché personalizado en Azure API Management).
<cache-lookup-value
key="@("userprofile-" + context.Variables["enduserid"])"
variable-name="userprofile" />
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
NOTE
Esta directiva debe tener una directiva Get from cache (Obtener de la caché) correspondiente.
Instrucción de la directiva
<cache-store-value key="cache key value" value="value to cache" duration="seconds" caching-type="prefer-
external | external | internal" />
Ejemplo
Para más información y ver ejemplos de esta directiva, consulte Custom caching in Azure API Management
(Almacenamiento en caché personalizado en Azure API Management).
<cache-store-value
key="@("userprofile-" + context.Variables["enduserid"])"
value="@((string)context.Variables["userprofile"])" duration="100000" />
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Remove value from cache (Quitar valor de la caché )
La directiva cache-remove-value elimina un elemento almacenado en caché identificado por su clave. La clave
puede tener un valor de cadena arbitrario y normalmente se proporciona mediante una expresión de directiva.
Instrucción de la directiva
Ejemplo
Elementos
Atributos
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Pasos siguientes
Para obtener más información sobre cómo trabajar con directivas, consulte:
Directivas de Azure API Management
API de transformación
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su configuración
Ejemplos de directivas
Directivas entre dominios de API Management
26/07/2019 • 8 minutes to read • Edit Online
En este tema se proporciona una referencia para las siguientes directivas de API Management. Para obtener más
información sobre cómo agregar y configurar directivas, consulte Directivas en Administración de API.
<cross-domain>
<!-Policy configuration is in the Adobe cross-domain policy file format,
see https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html-->
</cross-domain>
Ejemplo
<cross-domain>
<cross-domain>
<allow-http-request-headers-from domain='*' headers='*' />
</cross-domain>
</cross-domain>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: todos los ámbitos
CORS
La directiva cors agrega compatibilidad con el uso compartido de recursos entre orígenes (CORS ) a una
operación o a una API para permitir llamadas entre dominios desde clientes basados en explorador.
CORS permite a un explorador y a un servidor interactuar y determinar si se permiten o no solicitudes específicas
entre orígenes (por ejemplo, llamadas XMLHttpRequests realizadas desde JavaScript en una página web a otros
dominios). Esto permite más flexibilidad que si solo se permiten solicitudes del mismo origen, pero es más seguro
que permitir todas las solicitudes entre orígenes.
Instrucción de la directiva
<cors allow-credentials="false|true">
<allowed-origins>
<origin>origin uri</origin>
</allowed-origins>
<allowed-methods preflight-result-max-age="number of seconds">
<method>http verb</method>
</allowed-methods>
<allowed-headers>
<header>header name</header>
</allowed-headers>
<expose-headers>
<header>header name</header>
</expose-headers>
</cors>
Ejemplo
En este ejemplo se muestra cómo admitir solicitudes preparatorias, como aquellas con encabezados o métodos
personalizados distintos de GET y POST. Para admitir encabezados personalizados y verbos HTTP adicionales, use
las secciones allowed-methods y allowed-headers tal como se muestra en el ejemplo siguiente.
<cors allow-credentials="true">
<allowed-origins>
<!-- Localhost useful for development -->
<origin>http://localhost:8080/</origin>
<origin>http://example.com/</origin>
</allowed-origins>
<allowed-methods preflight-result-max-age="300">
<method>GET</method>
<method>POST</method>
<method>PATCH</method>
<method>DELETE</method>
</allowed-methods>
<allowed-headers>
<!-- Examples below show Azure Mobile Services headers -->
<header>x-zumo-installation-id</header>
<header>x-zumo-application</header>
<header>x-zumo-version</header>
<header>x-zumo-auth</header>
<header>content-type</header>
<header>accept</header>
</allowed-headers>
<expose-headers>
<!-- Examples below show Azure Mobile Services headers -->
<header>x-zumo-installation-id</header>
<header>x-zumo-application</header>
</expose-headers>
</cors>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: todos los ámbitos
JSONP
La directiva jsonp agrega JSON con compatibilidad con relleno (JSONP ) a una operación o a una API para
permitir llamadas entre dominios desde clientes basados en explorador de JavaScript. JSONP es un método
utilizado en los programas JavaScript para solicitar datos desde un servidor en un dominio diferente. JSONP
sortea la limitación exigida por la mayoría de los exploradores web donde el acceso a las páginas web debe estar
en el mismo dominio.
Instrucción de la directiva
Ejemplo
Si llama al método sin el parámetro de devolución de llamada ?cb=XXX, devolverá JSON sin formato (sin un
envoltorio de llamada de función).
Si agrega el parámetro de devolución de llamada ?cb=XXX , devolverá un resultado JSONP, envolviendo los
resultados JSON originales en torno a la función de devolución de llamada como XYZ('<json result goes here>');
.
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de las directivas.
Secciones de la directiva: outbound
Ámbitos de la directiva: todos los ámbitos
Pasos siguientes
Para obtener más información sobre cómo trabajar con directivas, consulte:
Directivas de Azure API Management
API de transformación
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su configuración
Ejemplos de directivas
Directivas de transformación de API Management
26/07/2019 • 34 minutes to read • Edit Online
En este tema se proporciona una referencia para las siguientes directivas de API Management. Para obtener más
información sobre cómo agregar y configurar directivas, consulte Directivas en Administración de API.
Directivas de transformación
Convertir JSON a XML : convierte el cuerpo de solicitud o respuesta de JSON a XML.
Convertir XML a JSON : convierte el cuerpo de solicitud o respuesta de XML a JSON.
Buscar y reemplazar la cadena en el cuerpo : encuentra una subcadena de solicitud o de respuesta y la
reemplaza por una subcadena diferente.
Enmascarar URL en el contenido : reescribe (enmascara) vínculos en el cuerpo de respuesta para que
apunten al vínculo equivalente a través de la puerta de enlace.
Establecer el servicio back-end : cambia el servicio back-end para una solicitud entrante.
Establecer cuerpo -establece el cuerpo del mensaje para las solicitudes entrantes y salientes.
Establecer encabezado HTTP : asigna un valor a un encabezado de respuesta o de solicitud existente o
agrega un nuevo encabezado de este tipo.
Establecer el parámetro de cadena de consulta : agrega, reemplaza el valor o elimina el parámetro de la
cadena de consulta de la solicitud.
URL de reescritura : convierte una URL de solicitud de su forma pública a la forma esperada por el servicio
web.
Transformar XML mediante una XSLT: aplica una transformación de XSL al XML del cuerpo de la solicitud o
respuesta.
Ejemplo
<policies>
<inbound>
<base />
</inbound>
<outbound>
<base />
<json-to-xml apply="always" consider-accept-header="false" parse-date="false"/>
</outbound>
</policies>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante, saliente y en caso de error
Ámbitos de la directiva: todos los ámbitos
Ejemplo
<policies>
<inbound>
<base />
</inbound>
<outbound>
<base />
<xml-to-json kind="direct" apply="always" consider-accept-header="false" />
</outbound>
</policies>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
- javascript-friendly: el
código JSON convertido
presenta un formato
intuitivo para los
desarrolladores de
JavaScript.
- direct: el código JSON
convertido refleja la
estructura del documento
XML original.
Ejemplo
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Instrucción de la directiva
<redirect-content-urls />
Ejemplo
<redirect-content-urls />
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante y saliente
Ámbitos de la directiva: todos los ámbitos
<set-backend-service backend-id="identifier of the backend entity specifying base URL of the backend service"
/>
NOTE
Las entidades de back-end pueden administrarse mediante API y PowerShell.
Ejemplo
<policies>
<inbound>
<choose>
<when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2013-05")">
<set-backend-service base-url="http://contoso.com/api/8.2/" />
</when>
<when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2014-03")">
<set-backend-service base-url="http://contoso.com/api/9.1/" />
</when>
</choose>
<base />
</inbound>
<outbound>
<base />
</outbound>
</policies>
En este ejemplo, la directiva del servicio back-end establecida enruta las solicitudes según el valor de versión
pasado en la cadena de consulta a un servicio back-end distinto del especificado en la API.
Inicialmente, la dirección URL base del servicio back-end se obtiene a partir de la configuración de la API. Por ello,
la dirección URL de solicitud
https://contoso.azure-api.net/api/partners/15?version=2013-05&subscription-key=abcdef se convierte en
http://contoso.com/api/10.4/partners/15?version=2013-05&subscription-key=abcdef , donde
http://contoso.com/api/10.4/ se corresponde con la dirección URL del servicio back-end especificada en la
configuración de la API.
Cuando se aplica la instrucción de la directiva <choose>, la dirección URL base del servicio back-end puede volver
a cambiar a http://contoso.com/api/8.2 o http://contoso.com/api/9.1 , en función del valor del parámetro de
consulta de la solicitud de la versión. Por ejemplo, si el valor es "2013-15" , la dirección URL final de la solicitud se
convierte en http://contoso.com/api/8.2/partners/15?version=2013-05&subscription-key=abcdef .
Si se desea aplicar más transformaciones a la solicitud, es posible usar otras directivas de transformación. Por
ejemplo, para quitar el parámetro de consulta de la versión ahora que la solicitud se está enrutando a un back-end
específico de la versión, se puede usar la directiva de establecimiento del parámetro de cadena de consulta para
quitar el atributo de versión, que ahora presenta un carácter redundante.
Ejemplo
<policies>
<inbound>
<set-backend-service backend-id="my-sf-service" sf-partition-
key="@(context.Request.Url.Query.GetValueOrDefault("userId","")" sf-replica-type="primary" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
En este ejemplo, la directiva enruta la solicitud a un back-end de Service Fabric, con la cadena de consulta userId
como la clave de partición y con la réplica principal de la partición.
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante y back-end
Ámbitos de la directiva: todos los ámbitos
Establecer cuerpo
Utilice la directiva set-body con la finalidad de establecer el cuerpo del mensaje para las solicitudes entrantes y
salientes. Para acceder al cuerpo del mensaje, puede utilizar las propiedades context.Request.Body o
context.Response.Body , según si la directiva se encuentra en la sección entrante o saliente.
IMPORTANT
Tenga en cuenta que, de forma predeterminada, al acceder al cuerpo del mensaje mediante context.Request.Body o
context.Response.Body , se pierde el cuerpo del mensaje original y se debe establecer devolviendo el cuerpo en la
expresión. Para conservar el contenido del cuerpo, establezca el parámetro preserveContent en true al acceder al
mensaje. Si preserveContent está establecido en true y la expresión devuelve un cuerpo distinto, se utiliza el que se
devuelva.
Tenga en cuenta las siguientes consideraciones al utilizar la directiva set-body .
Si usa la directiva set-body para devolver un cuerpo nuevo o actualizado, no hay que establecer preserveContent en
true porque estará especificando explícitamente el nuevo contenido del cuerpo.
No tiene sentido conservar el contenido de una respuesta en la canalización de entrada porque todavía no hay
ninguna respuesta.
De igual modo, no tiene sentido conservar el contenido de una solicitud en la canalización de salida porque la
solicitud ya se ha enviado al servidor en este momento.
Si esta directiva se usa cuando no hay ningún cuerpo de mensaje, por ejemplo, en un GET entrante, se producirá
una excepción.
Para obtener más información, consulte las secciones context.Request.Body , context.Response.Body y IMessage
de la tabla Context variable (Variable de contexto).
Instrucción de la directiva
Ejemplos
Ejemplo de texto literal
<set-body>Hello world!</set-body>
Ejemplo de acceso al cuerpo como una cadena. Tenga en cuenta que estamos conservando el cuerpo de la solicitud original para que
resulte accesible más adelante en la canalización.
<set-body>
@{
string inBody = context.Request.Body.As<string>(preserveContent: true);
if (inBody[0] =='c') {
inBody[0] = 'm';
}
return inBody;
}
</set-body>
Ejemplo de acceso al cuerpo como un elemento JObject. Tenga en cuenta que, al no conservar el cuerpo de la solicitud original, el
acceso posterior a él en la canalización producirá una excepción.
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
<!-- Copy this snippet into the outbound section to remove a number of data elements from the response
received from the backend service based on the name of the api product -->
<choose>
<when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
<set-body>@{
var response = context.Response.Body.As<JObject>();
foreach (var key in new [] {"minutely", "hourly", "daily", "flags"}) {
response.Property (key).Remove ();
}
return response.ToString();
}
</set-body>
</when>
</choose>
Uso de plantillas Liquid con la directiva de establecer cuerpo
La directiva set-body se puede configurar para usar el lenguaje de plantillas Liquid para transformar el cuerpo de
una solicitud o una respuesta. Esto puede resultar muy eficaz si necesita cambiar completamente el formato del
mensaje.
IMPORTANT
La implementación de Liquid que se utiliza en la directiva set-body está configurada en el modo de C#. Esto es
especialmente importante al realizar tareas como el filtrado. Por ejemplo, para usar un filtro de fecha se requiere usar las
mayúsculas y minúsculas de Pascal y el formato de fecha de C#; por ejemplo:
{{body.foo.startDateTime| Date:"yyyyMMddTHH:mm:ddZ"}}
IMPORTANT
Para enlazar correctamente con un cuerpo XML mediante la plantilla Liquid, use una directiva set-header para establecer
que Content-Type sea application/xml, text/xml (o cualquier tipo que termine en +xml); para un cuerpo JSON, debe ser
application/json, texto/json (o cualquier tipo que termine en +json).
<set-body template="liquid">
<soap:Envelope xmlns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetOpenOrders>
<cust>{{body.getOpenOrders.cust}}</cust>
</GetOpenOrders>
</soap:Body>
</soap:Envelope>
</set-body>
{
"order": {
"id": "{{body.customer.purchase.identifier}}",
"summary": "{{body.customer.purchase.orderShortDesc}}"
}
}
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
properties (Propiedades)
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
- liquid: la directiva de
establecer cuerpo usará el
motor de plantillas Liquid
Para acceder a información sobre solicitud y respuesta, la plantilla Liquid puede enlazar a un objeto de contexto
con las siguientes propiedades:
context.
Request.
Url
Method
OriginalMethod
OriginalUrl
IpAddress
MatchedParameters
HasBody
ClientCertificates
Headers
Response.
StatusCode
Method
Headers
Url.
Scheme
Host
Port
Path
Query
QueryString
ToUri
ToString
OriginalUrl.
Scheme
Host
Port
Path
Query
QueryString
ToUri
ToString
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante, saliente y back-end
Ámbitos de la directiva: todos los ámbitos
Establecer encabezado HTTP
La directiva set-header asigna un valor a un encabezado de respuesta o de solicitud existente o agrega un nuevo
encabezado de este tipo.
Inserta una lista de encabezados HTTP en un mensaje HTTP. Cuando se coloca en un proceso entrante, esta
directiva establece los encabezados HTTP para la solicitud que se pasa al servicio de destino. Cuando se coloca en
una canalización saliente, esta directiva establece los encabezados HTTP para la respuesta que se está enviando al
cliente de la puerta de enlace.
Instrucción de la directiva
Ejemplos
Ejemplo
<!-- Copy this snippet into the inbound element to forward some context information, user id and the region
the gateway is hosted in, to the backend service for logging or evaluation -->
<set-header name="x-request-context-data" exists-action="override">
<value>@(context.User.Id)</value>
<value>@(context.Deployment.Region)</value>
</set-header>
Para obtener más información, consulte Policy expressions (Expresiones de política) y Context variable (Variable de
contexto).
NOTE
Varios valores de un encabezado se concatenan en una cadena CSV, por ejemplo, headerName: value1,value2,value3 .
Las excepciones incluyen encabezados estandarizados, cuyos valores:
pueden contener comas ( User-Agent , WWW-Authenticate , Proxy-Authenticate ),
pueden contener fechas ( Cookie , Set-Cookie , Warning ),
contienen fechas ( Date , Expires , If-Modified-Since , If-Unmodified-Since , Last-Modified , Retry-After ).
En el caso de esas excepciones, varios valores de encabezado no se concatenarán en una cadena y se pasarán como
encabezados independientes, por ejemplo, User-Agent: value1 User-Agent: value2 User-Agent: value3 .
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
properties (Propiedades)
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Cuando se establece en
override , si se inscriben
varias entradas con el
mismo nombre, se establece
el encabezado de acuerdo
con todas ellas (que se
inscribirán varias veces); solo
los valores mostrados se
establecerán en el resultado.
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound, outbound, backend, on-error
Ámbitos de la directiva: todos los ámbitos
Ejemplos
Ejemplo
<set-query-parameter>
<parameter name="api-key" exists-action="skip">
<value>12345678901</value>
</parameter>
<!-- for multiple parameters with the same name add additional value elements -->
</set-query-parameter>
<!-- Copy this snippet into the inbound element to forward a piece of context, product name in this example,
to the backend service for logging or evaluation -->
<set-query-parameter name="x-product-name" exists-action="override">
<value>@(context.Product.Name)</value>
</set-query-parameter>
Para obtener más información, consulte Policy expressions (Expresiones de política) y Context variable (Variable de
contexto).
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
properties (Propiedades)
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
NOMBRE DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Cuando se establece en
override , se inscriben
varias entradas con los
resultados del mismo
nombre del parámetro de
consulta que se están
estableciendo de acuerdo
con todas las entradas (que
se inscribirán varias veces);
solo los valores mostrados
se establecerán en el
resultado.
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante y back-end
Ámbitos de la directiva: todos los ámbitos
URL de reescritura
La directiva rewrite-uri convierte una dirección URL de solicitud de su forma pública a la que espera recibir el
servicio web, como se muestra en el siguiente ejemplo.
URL pública: http://api.example.com/storenumber/ordernumber
Esta directiva se puede utilizar cuando una URL apta para el explorador o para individuos debe
transformarse en el formato de URL que espera el servicio web. Esta directiva solo debe aplicarse al
exponer un formato de URL alternativo, como URL limpias, direcciones URL RESTful y direcciones URL
sencillas o aptas para optimización del motor de búsqueda que son URL puramente estructurales que no
contienen una cadena de consulta, sino solo la ruta del recurso (después del esquema y la autoridad). Este
procedimiento se realiza con fines estéticos, de usabilidad o de optimización del motor de búsqueda (SEO ).
NOTE
Solo puede agregar parámetros de cadena de consulta mediante esta directiva. No puede agregar ningún parámetro de ruta
de plantilla adicional en la URL de reescritura.
Instrucción de la directiva
Ejemplo
<policies>
<inbound>
<base />
<rewrite-uri template="/v2/US/hardware/{storenumber}&{ordernumber}?City=city&State=state" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
<!-- Assuming incoming request is /get?a=b&c=d and operation template is set to /get?a={b} -->
<policies>
<inbound>
<base />
<rewrite-uri template="/put" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
<!-- Resulting URL will be /put?c=d -->
<!-- Assuming incoming request is /get?a=b&c=d and operation template is set to /get?a={b} -->
<policies>
<inbound>
<base />
<rewrite-uri template="/put" copy-unmatched-params="false" />
</inbound>
<outbound>
<base />
</outbound>
</policies>
<!-- Resulting URL will be /put -->
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Atributos
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
ATRIBUTO DESCRIPCIÓN OBLIGATORIO VALOR PREDETERMINADO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: inbound (entrada)
Ámbitos de la directiva: todos los ámbitos
<xsl-transform>
<parameter name="User-Agent">@(context.Request.Headers.GetValueOrDefault("User-Agent","non-specified"))
</parameter>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="User-Agent" />
<xsl:template match="* | @* | node()">
<xsl:copy>
<xsl:if test="self::* and not(parent::*)">
<xsl:attribute name="User-Agent">
<xsl:value-of select="$User-Agent" />
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="* | @* | node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
</xsl-transform>
Ejemplo
<policies>
<inbound>
<base />
</inbound>
<outbound>
<base />
<xsl-transform>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="xml" indent="yes" />
<!-- Copy all nodes directly-->
<xsl:template match="node()| @*|*">
<xsl:copy>
<xsl:apply-templates select="@* | node()|*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
</xsl-transform>
</outbound>
</policies>
Elementos
NOMBRE DESCRIPCIÓN OBLIGATORIO
Uso
Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.
Secciones de la directiva: entrante y saliente
Ámbitos de la directiva: todos los ámbitos
Pasos siguientes
Para obtener más información, consulte los temas siguientes:
Directivas de Azure API Management
En la Referencia de directivas se muestra una lista completa de declaraciones de directivas y su configuración
Ejemplos de directivas
Plantillas del portal para desarrolladores
23/07/2019 • 2 minutes to read • Edit Online
Azure API Management le ofrece la posibilidad de personalizar el contenido de las páginas del portal para
desarrolladores mediante un conjunto de plantillas que configuran su contenido. Por medio de la sintaxis
DotLiquid y el editor que prefiera, como DotLiquid for Designers (DotLiquid para diseñadores), y un conjunto
proporcionado de recursos de cadena, recursos de glifo y controles de página localizados, puede disponer de una
gran flexibilidad para configurar el contenido de las páginas como considere oportuno mediante estas plantillas.
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Pasos siguientes
Referencia de plantilla
Data model reference
Controles de página
Template resources
Plantillas de API en Azure API Management
23/07/2019 • 23 minutes to read • Edit Online
Azure API Management le ofrece la posibilidad de personalizar el contenido de las páginas del portal para
desarrolladores mediante un conjunto de plantillas que configuran su contenido. Por medio de la sintaxis
DotLiquid y el editor que prefiera, como DotLiquid for Designers (DotLiquid para diseñadores), y un conjunto
proporcionado de recursos de cadena, recursos de glifo y controles de página localizados, puede disponer de una
gran flexibilidad para configurar el contenido de las páginas como considere oportuno mediante estas plantillas.
Las plantillas de esta sección le permiten personalizar el contenido de las páginas de API en el portal para
desarrolladores.
API list
operación
Ejemplos de código
Curl
C#
Java
JavaScript
Objective C
PHP
Python
Ruby
NOTE
En la siguiente documentación se incluyen plantillas predeterminadas de ejemplo; sin embargo, están sujetas a cambios
debido a mejoras continuas. Puede ver las plantillas predeterminadas en vivo en el portal para desarrolladores; para ello, vaya
hasta a las plantillas individuales que desee. Para más información sobre cómo trabajar con plantillas, consulte Cómo
personalizar el portal para desarrolladores de API Management mediante plantillas.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
API list
La plantilla API list le permite personalizar el cuerpo de la página de lista de API en el portal para desarrolladores.
Plantilla predeterminada
<search-control></search-control>
<div class="row">
<div class="col-md-9">
<h2>{% localized "ApisStrings|PageTitleApis" %}</h2>
</div>
</div>
<div class="row">
<div class="col-md-12">
{% if apis.size > 0 %}
<ol class="list-unstyled">
{% for api in apis %}
<li>
<h3>
<a href="/docs/services/{{api.id}}">{{api.name}}</a>
</h3>
{{api.description}}
</li>
{% endfor %}
</ol>
<paging-control></paging-control>
{% else %}
{% localized "CommonResources|NoItemsToDisplay" %}
{% endif %}
</div>
</div>
Controles
La plantilla API list puede usar los siguientes controles de página.
paging-control
search-control
Modelo de datos
PROPIEDAD ESCRIBA DESCRIPCIÓN
apis Colección de entidades de resumen de Las API visibles para el usuario actual.
API.
Operation
La plantilla Operation le permite personalizar el cuerpo de la página de operación en el portal para
desarrolladores.
Plantilla predeterminada
<h2>{{api.name}}</h2>
<p>{{api.description }}</p>
<div class="panel">
<h3>{{operation.name}}</h3>
<p>{{operation.description }}</p>
<a class="btn btn-primary" href="{{consoleUrl}}" id="btnOpenConsole" role="button">
Try it
</a>
</div>
{% if operation.request %}
{% if operation.request.parameters.size > 0 %}
<h4>{% localized "Documentation|SectionHeadingRequestParameters" %}</h4>
<div class="panel">
{% for parameter in operation.request.parameters %}
<div class="row panel-body">
<div class="col-md-3">
<label>{{parameter.name}}</label>
{% unless parameter.required %}
<span class="text-muted">({% localized "Documentation|FormLabelSubtextOptional"
%})</span>
{% endunless %}
</div>
<div class="col-md-1">
{{parameter.typeName}}
</div>
<div class="col-md-8">
{{parameter.description}}
</div>
</div>
{% endfor %}
</div>
{% endif %}
{% if operation.request.headers.size > 0 %}
<h4>{% localized "Documentation|SectionHeadingRequestHeaders" %}</h4>
<div class="panel">
{% for header in operation.request.headers %}
<div class="row panel-body">
<div class="col-md-3">
<label>{{header.name}}</label>
{%unless header.required %}
<span class="text-muted">({% localized "Documentation|FormLabelSubtextOptional"
%})</span>
{% endunless %}
</div>
<div class="col-md-1">
{{header.typeName}}
</div>
<div class="col-md-8">
{{header.description}}
</div>
</div>
{% endfor %}
</div>
{% endif %}
{% if operation.request.representations.size > 0 %}
<div role="tabpanel">
<ul class="nav nav-tabs" role="tablist">
{% for representation in operation.request.representations %}
{% for representation in operation.request.representations %}
<li role="presentation" {% if forloop.first %}class="active"{% endif %}>
<a href="#requesttab{{forloop.index}}" role="tab" data-toggle="tab">
{{representation.contentType}}
</a>
</li>
{% endfor %}
</ul>
<div class="tab-content tab-content-boxed">
{% for representation in operation.request.representations %}
<div id="requesttab{{forloop.index}}" role="tabpanel" class="tab-pane snippet{% if
forloop.first %} active{% endif %}">
{% if representation.sample or representation.schema %}
<div role="tabpanel">
{% if representation.sample and representation.schema %}
<ul class="nav nav-tabs-borderless" role="tablist">
<li role="presentation" class="active">
<a href="#requesttab{{forloop.index}}sample" role="tab" data-
toggle="tab">Sample</a>
</li>
<li role="presentation">
<a href="#requesttab{{forloop.index}}schema" role="tab" data-
toggle="tab">Schema</a>
</li>
</ul>
{% endif %}
<div class="tab-content">
{% if representation.sample %}
<div id="requesttab{{forloop.index}}sample" role="tabpanel"
class="tab-pane snippet active">
<pre><code class="{{representation.Brush}}">{{
representation.sample | escape }}</code></pre>
</div>
{% endif %}
{% if representation.schema %}
<div id="requesttab{{forloop.index}}schema" role="tabpanel"
class="tab-pane snippet">
<pre><code class="{{representation.Brush}}">{{
representation.schema | escape }}</code></pre>
</div>
{% endif %}
</div>
</div>
{% endif %}
</div>
{% endfor %}
</div>
</div>
{% endif %}
<div class="clearfix"></div>
</div>
{% endif %}
{% endif %}
{% if operation.responses.size > 0 %}
{% for response in operation.responses %}
{% if response.description or response.representations.size > 0 %}
<h4>{% localized "Documentation|SectionHeadingResponse" %} {{response.statusCode}}</h4>
<div class="panel">
{% if response.description %}
<p>{{ response.description }}</p>
{% endif %}
{% if response.representations.size > 0 %}
<div role="tabpanel">
<div role="tabpanel">
<ul class="nav nav-tabs" role="tablist">
{% for representation in response.representations %}
<li role="presentation" {% if forloop.first %}class="active"{% endif %}>
<a href="#response{{response.statusCode}}tab{{forloop.index}}" role="tab"
data-toggle="tab">
{{representation.contentType}}
</a>
</li>
{% endfor %}
</ul>
<div class="tab-content tab-content-boxed">
{% for representation in response.representations %}
<div id="response{{response.statusCode}}tab{{forloop.index}}" role="tabpanel"
class="tab-pane snippet{% if forloop.first %} active{% endif %}">
{% if representation.sample or representation.schema %}
<div role="tabpanel">
<div class="tab-content">
{% if representation.sample %}
<div
id="response{{response.statusCode}}tab{{forloop.index}}sample" role="tabpanel" class="tab-pane snippet
active">
<pre><code class="{{representation.Brush}}">{{
representation.sample | escape }}</code></pre>
</div>
{% endif %}
{% if representation.schema %}
<div
id="response{{response.statusCode}}tab{{forloop.index}}schema" role="tabpanel" class="tab-pane snippet">
<pre><code class="{{representation.Brush}}">{{
representation.schema | escape }}</code></pre>
</div>
{% endif %}
</div>
</div>
{% endif %}
</div>
{% endfor %}
</div>
</div>
{% endif %}
<div class="clearfix"></div>
</div>
{% endif %}
{% endfor %}
{% endif %}
Controles
La plantilla Operation no permite el uso de ningún control de página.
Modelo de datos
PROPIEDAD ESCRIBA DESCRIPCIÓN
{
"apiId": "570275f1b16653124c8f9ba3",
"apiName": "Basic Calculator",
"apiDescription": "Arithmetics is just a call away!",
"api": {
"id": "570275f1b16653124c8f9ba3",
"name": "Basic Calculator",
"description": "Arithmetics is just a call away!"
},
"operation": {
"id": "570275f2b1665305c811cf49",
"name": "Add two integers",
"description": "Produces a sum of two numbers.",
"scheme": "https",
"uriTemplate": "calc/add?a={a}&b={b}",
"host": "sdcontoso5.azure-api.net",
"httpMethod": "GET",
"request": {
"description": null,
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": [
{
"name": "a",
"description": "First operand. Default value is <code>51</code>.",
"value": "51",
"options": [
"51"
],
"required": true,
"kind": 1,
"typeName": null
},
{
"name": "b",
"description": "Second operand. Default value is <code>49</code>.",
"value": "49",
"options": [
"49"
],
"required": true,
"kind": 1,
"typeName": null
}
],
"representations": []
},
"responses": []
},
"sampleUrl": "https://sdcontoso5.azure-api.net/calc/add?a={a}&b={b}",
"operationMenu": {
"ApiId": "570275f1b16653124c8f9ba3",
"CurrentOperationId": "570275f2b1665305c811cf49",
"Action": "Operation",
"MenuItems": [
{
"Id": "570275f2b1665305c811cf49",
"Title": "Add two integers",
"HttpMethod": "GET"
},
{
"Id": "570275f2b1665305c811cf4c",
"Title": "Divide two integers",
"HttpMethod": "GET"
},
{
"Id": "570275f2b1665305c811cf4b",
"Id": "570275f2b1665305c811cf4b",
"Title": "Multiply two integers",
"HttpMethod": "GET"
},
{
"Id": "570275f2b1665305c811cf4a",
"Title": "Subtract two integers",
"HttpMethod": "GET"
}
]
},
"consoleUrl": "/docs/services/570275f1b16653124c8f9ba3/operations/570275f2b1665305c811cf49/console",
"samples": [
{
"title": "Curl",
"snippet": null,
"brush": "plain",
"template": "DocumentationSamplesCurl",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
},
{
"title": "C#",
"snippet": null,
"brush": "csharp",
"template": "DocumentationSamplesCsharp",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
},
{
"title": "Java",
"snippet": null,
"brush": "java",
"template": "DocumentationSamplesJava",
"body": "{body}",
"method": "GET",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
},
{
"title": "JavaScript",
"snippet": null,
"brush": "xml",
"template": "DocumentationSamplesJs",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
},
{
"title": "ObjC",
"snippet": null,
"brush": "objc",
"template": "DocumentationSamplesObjc",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
},
{
{
"title": "PHP",
"snippet": null,
"brush": "php",
"template": "DocumentationSamplesPhp",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
},
{
"title": "Python",
"snippet": null,
"brush": "python",
"template": "DocumentationSamplesPython",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
},
{
"title": "Ruby",
"snippet": null,
"brush": "ruby",
"template": "DocumentationSamplesRuby",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"required": true,
"readonly": false
}
],
"parameters": []
}
]
}
Ejemplos de código
Las siguientes plantillas le permiten personalizar el cuerpo de los ejemplos de código individuales en la página de
operación.
Curl
C#
Java
JavaScript
Objective C
PHP
Python
Ruby
Curl
La plantilla DocumentationSamplesCurl le permite personalizar ese ejemplo de código en la sección de
ejemplos de código de la página de operación.
Plantilla predeterminada
@ECHO OFF
Controles
Las plantillas de ejemplo de código no permiten el uso de ningún control de página.
Modelo de datos
Entidad Code sample.
Ejemplo de datos de plantilla
{
"title": "Curl",
"snippet": null,
"brush": "plain",
"template": "DocumentationSamplesCurl",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
}
C#
La plantilla DocumentationSamplesCsharp le permite personalizar ese ejemplo de código en la sección de
ejemplos de código de la página de operación.
Plantilla predeterminada
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;
namespace CSHttpClientSample
{
static class Program
{
static void Main()
{
MakeRequest();
Console.WriteLine("Hit ENTER to exit...");
Console.ReadLine();
}
// Request body
byte[] byteData = Encoding.UTF8.GetBytes("{{ body | replace:'"','\"'}}");
// Request body
byte[] byteData = Encoding.UTF8.GetBytes("{{ body | replace:'"','\"'}}");
if (response.Content != null)
{
var responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
}
{% endcase -%}
}
}
}
Controles
Las plantillas de ejemplo de código no permiten el uso de ningún control de página.
Modelo de datos
Entidad Code sample.
Ejemplo de datos de plantilla
{
"title": "C#",
"snippet": null,
"brush": "csharp",
"template": "DocumentationSamplesCsharp",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
}
Java
La plantilla DocumentationSamplesJava le permite personalizar ese ejemplo de código en la sección de
ejemplos de código de la página de operación.
Plantilla predeterminada
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-
client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
try
{
URIBuilder builder = new URIBuilder("{{scheme}}://{{host}}{{path}}");
{% if body -%}
// Request body
StringEntity reqEntity = new StringEntity("{{ body | replace:'"','\"' }}");
request.setEntity(reqEntity);
{% endif -%}
if (entity != null)
{
System.out.println(EntityUtils.toString(entity));
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
Controles
Las plantillas de ejemplo de código no permiten el uso de ningún control de página.
Modelo de datos
Entidad Code sample.
Ejemplo de datos de plantilla
{
"title": "Java",
"snippet": null,
"brush": "java",
"template": "DocumentationSamplesJava",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
}
JavaScript
La plantilla DocumentationSamplesJs le permite personalizar ese ejemplo de código en la sección de ejemplos
de código de la página de operación.
Plantilla predeterminada
<!DOCTYPE html>
<html>
<head>
<title>JSSample</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(function() {
var params = {
{% if parameters.size > 0 -%}
// Request parameters
{% for parameter in parameters -%}
"{{parameter.name}}": "{{parameter.value}}",
{% endfor -%}
{% endif -%}
};
$.ajax({
url: "{{scheme}}://{{host}}{{path}}{% if path contains '?' %}&{% else %}?{% endif %}" +
$.param(params),
{% if headers.size > 0 -%}
beforeSend: function(xhrObj){
// Request headers
{% for header in headers -%}
xhrObj.setRequestHeader("{{header.name}}","{{header.value}}");
{% endfor -%}
},
{% endif -%}
type: "{{method}}",
{% if body -%}
// Request body
data: "{{ body | replace:'"','\"' }}",
{% endif -%}
})
.done(function(data) {
alert("success");
})
.fail(function() {
alert("error");
});
});
</script>
</body>
</html>
Controles
Las plantillas de ejemplo de código no permiten el uso de ningún control de página.
Modelo de datos
Entidad Code sample.
Ejemplo de datos de plantilla
{
"title": "JavaScript",
"snippet": null,
"brush": "xml",
"template": "DocumentationSamplesJs",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
}
Objective C
La plantilla DocumentationSamplesObjc le permite personalizar ese ejemplo de código en la sección de
ejemplos de código de la página de operación.
Plantilla predeterminada
#import <Foundation/Foundation.h>
NSLog(@"%@", path);
if (nil != error)
{
NSLog(@"Error: %@", error);
}
else
{
NSError* error = nil;
NSMutableDictionary* json = nil;
NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
NSLog(@"%@", dataString);
if (nil != _connectionData)
{
json = [NSJSONSerialization JSONObjectWithData:_connectionData
options:NSJSONReadingMutableContainers error:&error];
}
if (error || !json)
{
NSLog(@"Could not parse loaded json with error:%@", error);
}
NSLog(@"%@", json);
_connectionData = nil;
}
[pool drain];
return 0;
}
Controles
Las plantillas de ejemplo de código no permiten el uso de ningún control de página.
Modelo de datos
Entidad Code sample.
Ejemplo de datos de plantilla
{
"title": "ObjC",
"snippet": null,
"brush": "objc",
"template": "DocumentationSamplesObjc",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
}
PHP
La plantilla DocumentationSamplesPhp le permite personalizar ese ejemplo de código en la sección de
ejemplos de código de la página de operación.
Plantilla predeterminada
<?php
// This sample uses the HTTP_Request2 PHP library (https://github.com/pear/HTTP_Request2)
require_once 'HTTP/Request2.php';
$request->setHeader($headers);
{% endif -%}
$url->setQueryVariables($parameters);
{% endif -%}
$request->setMethod(HTTP_Request2::METHOD_{{method}});
{% if body -%}
// Request body
$request->setBody("{{ body | replace:'"','\"' }}");
{% endif -%}
try
{
$response = $request->send();
echo $response->getBody();
}
catch (HttpException $ex)
{
echo $ex;
}
?>
Controles
Las plantillas de ejemplo de código no permiten el uso de ningún control de página.
Modelo de datos
Entidad Code sample.
Ejemplo de datos de plantilla
{
"title": "PHP",
"snippet": null,
"brush": "php",
"template": "DocumentationSamplesPhp",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
}
Python
La plantilla DocumentationSamplesPython le permite personalizar ese ejemplo de código en la sección de
ejemplos de código de la página de operación.
Plantilla predeterminada
headers = {
{% if headers.size > 0 -%}
# Request headers
{% for header in headers -%}
'{{header.name}}': '{{header.value}}',
{% endfor -%}
{% endif -%}
}
params = urllib.urlencode({
{% if parameters.size > 0 -%}
# Request parameters
{% for parameter in parameters -%}
'{{parameter.name}}': '{{parameter.value}}',
{% endfor -%}
{% endif -%}
})
try:
{% case scheme -%}
{% when "http" -%}
conn = httplib.HTTPConnection('{{host}}')
{% when "https" -%}
conn = httplib.HTTPSConnection('{{host}}')
{% endcase -%}
conn.request("{{method}}", "{{path}}{% if path contains '?' %}&{% else %}?{% endif %}%s" % params{% if
body %}, "{{ body | replace:'"','\"' }}"{% endif %}, headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
conn.close()
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
####################################
headers = {
{% if headers.size > 0 -%}
# Request headers
{% for header in headers -%}
'{{header.name}}': '{{header.value}}',
{% endfor -%}
{% endif -%}
}
params = urllib.parse.urlencode({
{% if parameters.size > 0 -%}
# Request parameters
{% for parameter in parameters -%}
'{{parameter.name}}': '{{parameter.value}}',
{% endfor -%}
{% endif -%}
})
try:
{% case scheme -%}
{% when "http" -%}
conn = http.client.HTTPConnection('{{host}}')
{% when "https" -%}
conn = http.client.HTTPSConnection('{{host}}')
{% endcase -%}
conn.request("{{method}}", "{{path}}{% if path contains '?' %}&{% else %}?{% endif %}%s" % params{% if
body %}, "{{ body | replace:'"','\"' }}"{% endif %}, headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
####################################
Controles
Las plantillas de ejemplo de código no permiten el uso de ningún control de página.
Modelo de datos
Entidad Code sample.
Ejemplo de datos de plantilla
{
"title": "Python",
"snippet": null,
"brush": "python",
"template": "DocumentationSamplesPython",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
}
Ruby
La plantilla DocumentationSamplesRuby le permite personalizar ese ejemplo de código en la sección de
ejemplos de código de la página de operación.
Plantilla predeterminada
require 'net/http'
uri = URI('{{scheme}}://{{host}}{{path}}')
uri.query = URI.encode_www_form({
{% if parameters.size > 0 -%}
# Request parameters
{% for parameter in parameters -%}
'{{parameter.name}}' => '{{parameter.value}}'{% unless forloop.last %},{% endunless %}
{% endfor -%}
{% endif -%}
})
puts response.body
Controles
Las plantillas de ejemplo de código no permiten el uso de ningún control de página.
Modelo de datos
Entidad Code sample.
Ejemplo de datos de plantilla
{
"title": "Ruby",
"snippet": null,
"brush": "ruby",
"template": "DocumentationSamplesRuby",
"body": "{body}",
"method": "GET",
"scheme": "https",
"path": "/calc/add?a={a}&b={b}",
"query": "",
"host": "sdcontoso5.azure-api.net",
"headers": [
{
"name": "Ocp-Apim-Subscription-Key",
"description": "Subscription key which provides access to this API. Found in your <a
href='/developer'>Profile</a>.",
"value": "{subscription key}",
"typeName": "string",
"options": null,
"required": true,
"readonly": false
}
],
"parameters": []
}
Pasos siguientes
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Plantillas de producto en Azure API Management
23/07/2019 • 7 minutes to read • Edit Online
Azure API Management le ofrece la posibilidad de personalizar el contenido de las páginas del portal para
desarrolladores mediante un conjunto de plantillas que configuran su contenido. Por medio de la sintaxis
DotLiquid y el editor que prefiera, como DotLiquid for Designers (DotLiquid para diseñadores), y un conjunto
proporcionado de recursos de cadena, recursos de glifo y controles de página localizados, puede disponer de una
gran flexibilidad para configurar el contenido de las páginas como considere oportuno mediante estas plantillas.
Las plantillas de esta sección le permiten personalizar el contenido de las páginas de producto en el portal para
desarrolladores.
Product list
Producto
NOTE
En la siguiente documentación se incluyen plantillas predeterminadas de ejemplo; sin embargo, están sujetas a cambios
debido a mejoras continuas. Puede ver las plantillas predeterminadas en vivo en el portal para desarrolladores; para ello, vaya
hasta a las plantillas individuales que desee. Para más información sobre cómo trabajar con plantillas, consulte Cómo
personalizar el portal para desarrolladores de API Management mediante plantillas.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Product list
La plantilla Product list le permite personalizar el cuerpo de la página de lista de productos en el portal para
desarrolladores.
Plantilla predeterminada
<search-control></search-control>
<div class="row">
<div class="col-md-9">
<h2>{% localized "ProductsStrings|PageTitleProducts" %}</h2>
</div>
</div>
<div class="row">
<div class="col-md-12">
{% if products.size > 0 %}
<ul class="list-unstyled">
{% for product in products %}
<li>
<h3><a href="/products/{{product.id}}">{{product.title}}</a></h3>
{{product.description}}
</li>
{% endfor %}
</ul>
<paging-control></paging-control>
{% else %}
{% localized "CommonResources|NoItemsToDisplay" %}
{% endif %}
</div>
</div>
Controles
La plantilla Product list puede usar los siguientes controles de página.
paging-control
search-control
Modelo de datos
PROPIEDAD ESCRIBA DESCRIPCIÓN
Product
La plantilla Product list le permite personalizar el cuerpo de la página de producto en el portal para
desarrolladores.
Plantilla predeterminada
<h2>{{Product.Title}}</h2>
<p>{{Product.Description}}</p>
{% if apis.size > 0 %}
<p>
<b>
{% if apis.size == 1 %}
{% capture apisCountText %}{% localized "ProductDetailsStrings|TextblockSingleApisCount" %}{% endcapture
%}
{% else %}
{% capture apisCountText %}{% localized "ProductDetailsStrings|TextblockMultipleApisCount" %}{% endcapture
%}
{% endif %}
<ul>
{% for api in Apis %}
<li>
<a href="/docs/services/{{api.Id}}">{{api.Name}}</a>
</li>
{% endfor %}
</ul>
{% endif %}
{% if subscriptions.size > 0 %}
<p>
<b>
{% if subscriptions.size == 1 %}
{% capture subscriptionsCountText %}{% localized "ProductDetailsStrings|TextblockSingleSubscriptionsCount"
%}{% endcapture %}
{% else %}
{% capture subscriptionsCountText %}{% localized
"ProductDetailsStrings|TextblockMultipleSubscriptionsCount" %}{% endcapture %}
{% endif %}
<ul>
{% for subscription in subscriptions %}
<li>
<a href="/developer#{{subscription.Id}}">{{subscription.DisplayName}}</a>
</li>
{% endfor %}
</ul>
{% endif %}
{% if CannotAddBecauseSubscriptionNumberLimitReached %}
<b>{% localized "ProductDetailsStrings|TextblockSubscriptionLimitReached" %}</b>
{% elsif CannotAddBecauseMultipleSubscriptionsNotAllowed == false %}
<subscribe-button></subscribe-button>
{% endif %}
Controles
La plantilla Product list puede usar los siguientes controles de página.
subscribe-button
Modelo de datos
PROPIEDAD ESCRIBA DESCRIPCIÓN
{
"Product": {
"Id": "56f9445ffaf7560049060001",
"Title": "Starter",
"Description": "Subscribers will be able to run 5 calls/minute up to a maximum of 100 calls/week.",
"Terms": "",
"ProductState": 1,
"AllowMultipleSubscriptions": false,
"MultipleSubscriptionsCount": 1
},
"IsDeveloperSubscribed": true,
"SubscriptionState": 1,
"Limits": [],
"DelegatedSubscriptionEnabled": false,
"DelegatedSubscriptionUrl": null,
"IsAgreed": false,
"Subscriptions": [
{
"Id": "56f9445ffaf7560049070001",
"DisplayName": "Starter (default)"
}
],
"Apis": [
{
"id": "56f9445ffaf7560049040001",
"name": "Echo API",
"description": null,
"serviceUrl": "http://echoapi.cloudapp.net/api",
"path": "echo",
"protocols": [
2
],
"authenticationSettings": null,
"subscriptionKeyParameterNames": null
}
],
"CannotAddBecauseSubscriptionNumberLimitReached": false,
"CannotAddBecauseMultipleSubscriptionsNotAllowed": true
}
Pasos siguientes
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Plantillas de aplicación en Azure API Management
23/07/2019 • 4 minutes to read • Edit Online
Azure API Management le ofrece la posibilidad de personalizar el contenido de las páginas del portal para
desarrolladores mediante un conjunto de plantillas que configuran su contenido. Por medio de la sintaxis
DotLiquid y el editor que prefiera, como DotLiquid for Designers (DotLiquid para diseñadores), y un conjunto
proporcionado de recursos de cadena, recursos de glifo y controles de página localizados, puede disponer de una
gran flexibilidad para configurar el contenido de las páginas como considere oportuno mediante estas plantillas.
Las plantillas de esta sección le permiten personalizar el contenido de las páginas de Application en el portal para
desarrolladores.
Application list
Aplicación
NOTE
En la siguiente documentación se incluyen plantillas predeterminadas de ejemplo; sin embargo, están sujetas a cambios
debido a mejoras continuas. Puede ver las plantillas predeterminadas en vivo en el portal para desarrolladores; para ello, vaya
hasta a las plantillas individuales que desee. Para más información sobre cómo trabajar con plantillas, consulte Cómo
personalizar el portal para desarrolladores de API Management mediante plantillas.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Application list
La plantilla Application list le permite personalizar el cuerpo de la página de lista de aplicaciones en el portal
para desarrolladores.
Plantilla predeterminada
<div class="row">
<div class="col-md-9">
<h2>{% localized "AppStrings|WebApplicationsHeader" %}</h2>
</div>
</div>
<div class="row">
<div class="col-md-12">
{% if applications.size > 0 %}
<ul class="list-unstyled">
{% for app in applications %}
<li>
{% if app.application.icon.url != "" %}
<aside>
<a href="/applications/details/{{app.application.id}}"><img src="
{{app.application.icon.url}}" alt="App Icon" /></a>
</aside>
{% endif %}
<h3><a href="/applications/details/{{app.application.id}}">{{app.application.title}}</a></h3>
{{app.application.description}}
</li>
{% endfor %}
</ul>
<paging-control></paging-control>
{% else %}
{% localized "CommonResources|NoItemsToDisplay" %}
{% endif %}
</div>
</div>
Controles
La plantilla Product list puede usar los siguientes controles de página.
paging-control
Modelo de datos
PROPIEDAD ESCRIBA DESCRIPCIÓN
Application
La plantilla Application le permite personalizar el cuerpo de la página de aplicación en el portal para
desarrolladores.
Plantilla predeterminada
<h2>{{title}}</h2>
{% if icon.url != "" %}
<aside class="applications_aside">
<div class="image-placeholder">
<img src="{{icon.url}}" alt="Application Icon" />
</div>
</aside>
{% endif %}
<article>
{% if url != "" %}
<a target="_blank" href="{{url}}">{{url}}</a>
{% endif %}
<p>{{description}}</p>
{% if requirements != null %}
<h3>{% localized "AppDetailsStrings|WebApplicationsRequirementsHeader" %}</h3>
<p>{{requirements}}</p>
{% endif %}
{% if attachments.size > 0 %}
<h3>{% localized "AppDetailsStrings|WebApplicationsScreenshotsHeader" %}</h3>
{% for screenshot in attachments %}
{% if screenshot.type != "Icon" %}
<a href="{{screenshot.url}}" data-lightbox="example-set">
<img src="/Developer/Applications/Thumbnail?url={{screenshot.url}}" alt='{% localized
"AppDetailsStrings|WebApplicationsScreenshotAlt" %}' />
</a>
{% endif %}
{% endfor %}
{% endif %}
</article>
Controles
La plantilla Application no permite el uso de ningún control de página.
Modelo de datos
Entidad Application.
Ejemplo de datos de plantilla
{
"Id": "5702b96fb16653124c8f9ba8",
"Title": "Contoso Calculator",
"Description": "A simple online calculator.",
"Url": null,
"Version": null,
"Requirements": "Free application with no requirements.",
"State": 2,
"RegistrationDate": "2016-04-04T18:59:00",
"CategoryId": 5,
"DeveloperId": "5702b5b0b16653124c8f9ba4",
"Attachments": [
{
"UniqueId": "a58af001-e6c3-45fd-8bc9-c60a1875c3f6",
"Url": "https://apimgmtst3aybshdqqcqrle4.blob.core.windows.net/content/applications/a58af001-e6c3-
45fd-8bc9-c60a1875c3f6.png",
"Type": "Icon",
"ContentType": "image/png"
},
{
"UniqueId": "2b4fa5dd-00ff-4a8f-b1b7-51e715849ede",
"Url": "https://apimgmtst3aybshdqqcqrle4.blob.core.windows.net/content/applications/2b4fa5dd-00ff-
4a8f-b1b7-51e715849ede.png",
"Type": "Screenshot",
"ContentType": "image/png"
}
],
"Icon": {
"UniqueId": "a58af001-e6c3-45fd-8bc9-c60a1875c3f6",
"Url": "https://apimgmtst3aybshdqqcqrle4.blob.core.windows.net/content/applications/a58af001-e6c3-
45fd-8bc9-c60a1875c3f6.png",
"Type": "Icon",
"ContentType": "image/png"
}
}
Pasos siguientes
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Plantillas de problema en Azure API Management
23/07/2019 • 4 minutes to read • Edit Online
Azure API Management le ofrece la posibilidad de personalizar el contenido de las páginas del portal para
desarrolladores mediante un conjunto de plantillas que configuran su contenido. Por medio de la sintaxis
DotLiquid y el editor que prefiera, como DotLiquid for Designers (DotLiquid para diseñadores), y un conjunto
proporcionado de recursos de cadena, recursos de glifo y controles de página localizados, puede disponer de una
gran flexibilidad para configurar el contenido de las páginas como considere oportuno mediante estas plantillas.
Las plantillas de esta sección le permiten personalizar el contenido de las páginas de problema en el portal para
desarrolladores.
Issue list
NOTE
En la siguiente documentación se incluyen plantillas predeterminadas de ejemplo; sin embargo, están sujetas a cambios
debido a mejoras continuas. Puede ver las plantillas predeterminadas en vivo en el portal para desarrolladores; para ello, vaya
hasta a las plantillas individuales que desee. Para más información sobre cómo trabajar con plantillas, consulte Cómo
personalizar el portal para desarrolladores de API Management mediante plantillas.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Issue list
La plantilla Issue list le permite personalizar el cuerpo de la página de lista de problemas en el portal para
desarrolladores.
Plantilla predeterminada
<div class="row">
<div class="col-md-9">
<h2>{% localized "IssuesStrings|WebIssuesIndexTitle" %}</h2>
</div>
</div>
<div class="row">
<div class="col-md-12">
{% if issues.size > 0 %}
<ul class="list-unstyled">
{% capture reportedBy %}{% localized "IssuesStrings|WebIssuesStatusReportedBy" %}{% endcapture %}
{% assign replaceString0 = '{0}' %}
{% assign replaceString1 = '{1}' %}
{% for issue in issues %}
<li>
<h3>
<a href="/issues/{{issue.id}}">{{issue.title}}</a>
</h3>
<p>{{issue.description}}</p>
<em>
{% capture state %}{{issue.issueState}}{% endcapture %}
{% capture devName %}{{issue.subscriptionDeveloperName}}{% endcapture %}
{% capture str1 %}{{ reportedBy | replace : replaceString0, state }}{% endcapture %}
{{ str1 | replace : replaceString1, devName }}
<span class="UtcDateElement">{{ issue.reportedOn | date: "r" }}</span>
</em>
</li>
{% endfor %}
</ul>
<paging-control></paging-control>
{% else %}
{% localized "CommonResources|NoItemsToDisplay" %}
{% endif %}
{% if canReportIssue %}
<a class="btn btn-primary" id="createIssue" href="/Issues/Create">{% localized
"IssuesStrings|WebIssuesReportIssueButton" %}</a>
{% elsif isAuthenticated %}
<hr />
<p>{% localized "IssuesStrings|WebIssuesNoActiveSubscriptions" %}</p>
{% else %}
<hr />
<p>
{% capture signIntext %}{% localized "IssuesStrings|WebIssuesNotSignin" %}{% endcapture %}
{% capture link %}<a href="/signin">{% localized "IssuesStrings|WebIssuesSignIn" %}</a>{% endcapture %}
{{ signIntext | replace : replaceString0, link }}
</p>
{% endif %}
</div>
</div>
Controles
La plantilla Issue list puede usar los siguientes controles de página.
paging-control
Modelo de datos
PROPIEDAD ESCRIBA DESCRIPCIÓN
{
"Issues": [
{
"Id": "5702b68bb16653124c8f9ba7",
"ApiId": "570275f1b16653124c8f9ba3",
"Title": "I couldn't figure out how to connect my application to the API",
"Description": "I'm having trouble connecting my application to the backend API.",
"SubscriptionDeveloperName": "Clayton",
"IssueState": "Proposed",
"ReportedOn": "2016-04-04T18:46:35.64",
"Comments": null,
"Attachments": null,
"Services": null
}
],
"Paging": {
"Page": 1,
"PageSize": 10,
"TotalItemCount": 1,
"ShowAll": false,
"PageCount": 1
},
"IsAuthenticated": true,
"CanReportIssue": true,
"Search": null
}
Pasos siguientes
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Plantillas de perfil de usuario en Azure API
Management
23/07/2019 • 13 minutes to read • Edit Online
Azure API Management le ofrece la posibilidad de personalizar el contenido de las páginas del portal para
desarrolladores mediante un conjunto de plantillas que configuran su contenido. Por medio de la sintaxis
DotLiquid y el editor que prefiera, como DotLiquid for Designers (DotLiquid para diseñadores), y un conjunto
proporcionado de recursos de cadena, recursos de glifo y controles de página localizados, puede disponer de una
gran flexibilidad para configurar el contenido de las páginas como considere oportuno mediante estas plantillas.
Las plantillas de esta sección le permiten personalizar el contenido de las páginas de perfil de usuario en el portal
para desarrolladores.
Perfil
Subscriptions
Aplicaciones
Update account info
NOTE
En la siguiente documentación se incluyen plantillas predeterminadas de ejemplo; sin embargo, están sujetas a cambios
debido a mejoras continuas. Puede ver las plantillas predeterminadas en vivo en el portal para desarrolladores; para ello, vaya
hasta a las plantillas individuales que desee. Para más información sobre cómo trabajar con plantillas, consulte Cómo
personalizar el portal para desarrolladores de API Management mediante plantillas.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Perfil
La plantilla de perfil le permite personalizar la sección de perfil de usuario de la página de perfil de usuario en el
portal para desarrolladores.
Plantilla predeterminada
<div class="pull-right">
{% if canChangePassword == true %}
<a class="btn btn-default" id="ChangePassword" role="button" href="{{changePasswordUrl}}">{% localized
"UserProfile|ButtonLabelChangePassword" %}</a>
{% endif %}
<a id="changeAccountInfo" href="{{changeNameOrEmailUrl}}" class="btn btn-default">
<span class="glyphicon glyphicon-user"></span>
<span>{% localized "UserProfile|ButtonLabelChangeAccountInfo" %}</span>
</a>
</div>
<h2>{% localized "SubscriptionStrings|PageTitleDeveloperProfile" %}</h2>
<div class="container-fluid">
<div class="row">
<div class="col-sm-3">
<label for="Email">{% localized "UserProfile|TextboxLabelEmail" %}</label>
</div>
<div class="col-sm-9" id="Email">{{email}}</div>
</div>
{% if isSystemUser != true %}
<div class="row">
<div class="col-sm-3">
<label for="FirstName">{% localized "UserProfile|TextboxLabelEmailFirstName" %}</label>
</div>
<div class="col-sm-9" id="FirstName">{{FirstName}}</div>
</div>
<div class="row">
<div class="col-sm-3">
<label for="LastName">{% localized "UserProfile|TextboxLabelEmailLastName" %}</label>
</div>
<div class="col-sm-9" id="LastName">{{LastName}}</div>
</div>
{% else %}
<div class="row">
<div class="col-sm-3">
<label for="CompanyName">{% localized "UserProfile|TextboxLabelOrganizationName" %}</label>
</div>
<div class="col-sm-9" id="CompanyName">{{CompanyName}}</div>
</div>
<div class="row">
<div class="col-sm-3">
<label for="AddresserEmail">{% localized "UserProfile|TextboxLabelNotificationsSenderEmail" %}</label>
</div>
<div class="col-sm-9" id="AddresserEmail">{{AddresserEmail}}</div>
</div>
{% endif %}
</div>
Controles
Esta plantilla no puede utilizar los controles de página.
Modelo de datos
NOTE
Las plantillas de perfil, aplicaciones, y suscripciones comparten el mismo modelo de datos y reciben los mismos datos de
plantilla.
Suscripciones
La plantilla de suscripciones le permite personalizar la sección de suscripciones de la página de perfil de usuario
en el portal para desarrolladores.
Plantilla predeterminada
<div class="ap-account-subscriptions">
<a href="{{developersUsageStatisticsLink}}" id="UsageStatistics" class="btn btn-default pull-right">
<span class="glyphicon glyphicon-stats"></span>
<span>{% localized "SubscriptionListStrings|WebDevelopersUsageStatisticsLink" %}</span>
</a>
<table class="table">
<thead>
<tr>
<th>Subscription details</th>
<th>Product</th>
<th>{% localized "SubscriptionListStrings|WebDevelopersSubscriptionTableStateHeader" %}</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{% if subscriptions.size == 0 %}
<tr>
<td class="text-center" colspan="4">
{% localized "CommonResources|NoItemsToDisplay" %}
</td>
</tr>
{% else %}
{% for subscription in subscriptions %}
<tr id="{{subscription.id}}" {% if subscription.hasExpired %} class="expired" {% endif %}>
<td>
<div class="row">
<label class="col-lg-3">{% localized "SubscriptionListStrings|SubscriptionPropertyLabelName" %}
</label>
<div class="col-lg-6">
{{ subscription.displayName }}
</div>
<div class="col-lg-2">
<a class="btn-link" href="/Subscriptions/{{subscription.id}}/Rename">Rename</a>
</div>
<div class="clearfix"></div>
</div>
{% if subscription.isAwaitingApproval %}
<div class="row">
<label class="col-lg-3">{% localized
"SubscriptionListStrings|SubscriptionPropertyLabelRequestedDate" %}</label>
<div class="col-lg-6">
{{ subscription.createdDate | date:"MM/dd/yyyy" }}
</div>
</div>
{% else %}
{% if subscription.isRejected == false %}
{% if subscription.startDate %}
<div class="row">
<label class="col-lg-3">{% localized
"SubscriptionListStrings|SubscriptionPropertyLabelStartedDate" %}</label>
<div class="col-lg-6">
{{ subscription.startDate | date:"MM/dd/yyyy" }}
</div>
</div>
{% endif %}
Controles
Esta plantilla puede utilizar los siguientes controles de página.
subscription-cancel
Modelo de datos
NOTE
Las plantillas de perfil, aplicaciones, y suscripciones comparten el mismo modelo de datos y reciben los mismos datos de
plantilla.
Aplicaciones
La plantilla de aplicaciones le permite personalizar la sección de suscripciones de la página de perfil de usuario en
el portal para desarrolladores.
Plantilla predeterminada
<div class="ap-account-applications">
<a id="RegisterApplication" href="/Developer/Applications/Register" class="btn btn-success pull-right">
<span class="glyphicon glyphicon-plus"></span>
<span>{% localized "ApplicationListStrings|WebDevelopersRegisterAppLink" %}</span>
</a>
<h2>{% localized "ApplicationListStrings|WebDevelopersYourApplicationsHeader" %}</h2>
<table class="table">
<thead>
<tr>
<th class="col-md-8">{% localized "ApplicationListStrings|WebDevelopersAppTableNameHeader" %}</th>
<th class="col-md-2">{% localized "ApplicationListStrings|WebDevelopersAppTableCategoryHeader" %}</th>
<th class="col-md-2" colspan="2">{% localized
"ApplicationListStrings|WebDevelopersAppTableStateHeader" %}</th>
</tr>
</thead>
<tbody>
{% if applications.size == 0 %}
<tr>
<td class="col-md-12 text-center" colspan="4">
{% localized "CommonResources|NoItemsToDisplay" %}
</td>
</tr>
{% else %}
{% when ApplicationStateModel.Unpublished %}
{% localized "ApplicationListStrings|WebDevelopersAppNotPublished" %}
{% else %}
{{ app.state }}
{% endcase %}
</strong>
</td>
<td class="col-md-1">
<div class="nowrap">
{% if app.state != ApplicationStateModel.Submitted and app.state !=
ApplicationStateModel.Published %}
<app-actions params="{ appId: '{{app.id}}' }"></app-actions>
{% endif %}
</div>
</td>
</tr>
{% endfor %}
{% endif %}
</tbody>
</table>
</div>
Controles
Esta plantilla puede utilizar los siguientes controles de página.
app-actions
Modelo de datos
NOTE
Las plantillas de perfil, aplicaciones, y suscripciones comparten el mismo modelo de datos y reciben los mismos datos de
plantilla.
Plantilla predeterminada
<div class="row">
<div class="col-sm-6 col-md-6">
<div class="form-group">
<label for="Email">{% localized "SigninResources|TextboxLabelEmail" %}</label>
<input autofocus="autofocus" class="form-control" id="Email" name="Email" type="text" value="{{email}}">
</div>
<div class="form-group">
<label for="FirstName">{% localized "SigninResources|TextboxLabelEmailFirstName" %}</label>
<input class="form-control" id="FirstName" name="FirstName" type="text" value="{{firstName}}">
</div>
<div class="form-group">
<label for="LastName">{% localized "SigninResources|TextboxLabelEmailLastName" %}</label>
<input class="form-control" id="LastName" name="LastName" type="text" value="{{lastName}}">
</div>
<div class="form-group">
<label for="Password">{% localized "SigninResources|WebAuthenticationSigninPasswordLabel" %}</label>
<input class="form-control" id="Password" name="Password" type="password">
</div>
</div>
</div>
Controles
Esta plantilla no puede utilizar los controles de página.
Modelo de datos
Entidad Información de cuenta de usuario.
Ejemplo de datos de plantilla
{
"FirstName": "Administrator",
"LastName": "",
"Email": "[email protected]",
"Password": null,
"NameIdentifier": null,
"ProviderName": null,
"IsBasicAccount": false
}
Pasos siguientes
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Plantillas de página en Azure API Management
23/07/2019 • 5 minutes to read • Edit Online
Azure API Management le ofrece la posibilidad de personalizar el contenido de las páginas del portal para
desarrolladores mediante un conjunto de plantillas que configuran su contenido. Por medio de la sintaxis
DotLiquid y el editor que prefiera, como DotLiquid for Designers (DotLiquid para diseñadores), y un conjunto
proporcionado de recursos de cadena, recursos de glifo y controles de página localizados, puede disponer de una
gran flexibilidad para configurar el contenido de las páginas como considere oportuno mediante estas plantillas.
Las plantillas de esta sección le permiten personalizar el contenido de las páginas de inicio de sesión, registro y
página no encontrada del portal para desarrolladores.
Sign in
Sign up
Page not found
NOTE
En la siguiente documentación se incluyen plantillas predeterminadas de ejemplo; sin embargo, están sujetas a cambios
debido a mejoras continuas. Puede ver las plantillas predeterminadas en vivo en el portal para desarrolladores; para ello, vaya
hasta a las plantillas individuales que desee. Para más información sobre cómo trabajar con plantillas, consulte Cómo
personalizar el portal para desarrolladores de API Management mediante plantillas.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Sign in
La plantilla sign in le permite personalizar la página de inicio de sesión en el portal para desarrolladores.
Plantilla predeterminada
<h2 class="text-center">{% localized "SigninStrings|WebAuthenticationSigninTitle" %}</h2>
{% if registrationEnabled == true %}
<p class="text-center">{% localized "SigninStrings|WebAuthenticationNotAMember" %}</p>
{% endif %}
{% if userRegistrationTermsEnabled == true %}
<div class="col-md-6">
<div id="terms" class="modal" role="dialog" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{% localized "SigninResources|DialogHeadingTermsOfUse" %}</h4>
</div>
<div class="modal-body break-all">{{userRegistrationTerms}}</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{% localized
"CommonStrings|ButtonLabelClose" %}</button>
</div>
</div>
</div>
</div>
<p>{% localized "SigninResources|TextblockUserRegistrationTermsProvided" %}</p>
</div>
{% endif %}
</div>
Controles
Esta plantilla puede usar los siguientes controles de página.
basic-signin
providers
Modelo de datos
Entidad User sign in.
Ejemplo de datos de plantilla
{
"Email": null,
"Password": null,
"ReturnUrl": null,
"RememberMe": false,
"RegistrationEnabled": true,
"DelegationEnabled": false,
"DelegationUrl": null,
"SsoSignUpUrl": null,
"AuxServiceUrl": "https://portal.azure.com/#resource/subscriptions/{subscription ID}/resourceGroups/Api-
Default-West-US/providers/Microsoft.ApiManagement/service/contoso5",
"Providers": [
{
"Properties": {
"AuthenticationType": "Aad",
"Caption": "Azure Active Directory"
},
"AuthenticationType": "Aad",
"Caption": "Azure Active Directory"
}
],
"UserRegistrationTerms": null,
"UserRegistrationTermsEnabled": false
}
Sign up
La plantilla sign up le permite personalizar la página de registro en el portal para desarrolladores.
Plantilla predeterminada
Controles
Esta plantilla puede usar los siguientes controles de página.
sign-up
Modelo de datos
Entidad User sign up.
Ejemplo de datos de plantilla
{
"PasswordConfirm": null,
"Password": null,
"PasswordVerdictLevel": 0,
"UserRegistrationTerms": null,
"UserRegistrationTermsOptions": 0,
"ConsentAccepted": false,
"Email": null,
"FirstName": null,
"LastName": null,
"UserData": null,
"NameIdentifier": null,
"ProviderName": null
}
Plantilla predeterminada
<h2>{% localized "NotFoundStrings|PageTitleNotFound" %}</h2>
<p>
{% capture textReportProblem %}{% localized "NotFoundStrings|TextReportProblem" %}{% endcapture %}
{% capture emailLink %}<a href="mailto:[email protected]" target="_self" title="API Management Support">
{% localized "NotFoundStrings|LinkLabelSendUsEmail" %}</a>{% endcapture %}
{% assign replaceString = '{0}' %}
Controles
Esta plantilla no puede usar ninguno de los controles de página.
Modelo de datos
PROPIEDAD ESCRIBA DESCRIPCIÓN
Pasos siguientes
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Recursos de plantilla de Azure API Management
23/07/2019 • 46 minutes to read • Edit Online
Azure API Management proporciona los siguientes tipos de recursos para su uso en las plantillas del portal para
desarrolladores.
Recursos de cadena
Recursos de glifo
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Recursos de cadena
API Management proporciona un conjunto completo de recursos de cadena para su uso en el portal para
desarrolladores. Estos recursos están localizados en todos los idiomas admitidos por API Management. El
conjunto predeterminado de plantillas utiliza estos recursos para encabezados de páginas etiquetas y cualquier
cadena constante que se muestren en el portal para desarrolladores. Para usar un recurso de cadena en sus
plantillas, especifique el prefijo de la cadena del recurso seguido por el nombre de la cadena, como se muestra en
el siguiente ejemplo.
{% localized "Prefix|Name" %}
El siguiente ejemplo está tomado de la plantilla Lista de productos y muestra Productos en la parte superior de la
página.
"en" "English"
"cs" "Čeština"
"de" "Deutsch"
"es" "Español"
"fr" "Français"
CONFIGURACIÓN REGIONAL IDIOMA
"hu" "Magyar"
"it" "Italiano"
"ja-JP" "日本語"
"ko" "한국어"
"nl" "Nederlands"
"pl" "Polski"
"ru" "Русский"
"sv" "Svenska"
"tr" "Türkçe"
"zh-hans" "中文(简体)"
"zh-hant" "中文(繁體)"
Consulte las siguientes tablas a fin de obtener los recursos de cadena disponibles para su uso en sus plantillas del
portal para desarrolladores. Use el nombre de la tabla como el prefijo para los recursos de cadena de esa tabla.
ApisStrings
ApplicationListStrings
AppDetailsStrings
AppStrings
CommonResources
CommonStrings
Documentación
ErrorPageStrings
IssuesStrings
NotFoundStrings
ProductDetailsStrings
ProductsStrings
ProviderInfoStrings
SigninResources
SigninStrings
SignupStrings
SubscriptionListStrings
SubscriptionStrings
UpdateProfileStrings
UserProfile
ApisStrings
NOMBRE TEX TO
AppDetailsStrings
NOMBRE TEX TO
WebApplicationsRequirementsHeader Requisitos
WebApplicationsScreenshotAlt Instantánea
ApplicationListStrings
NOMBRE TEX TO
WebDevelopersAppNotPublished No publicado
WebDevelopersAppNotSubmitted No enviado
WebDevelopersAppTableCategoryHeader Categoría
WebDevelopersAppTableNameHeader NOMBRE
WebDevelopersAppTableStateHeader Estado
WebDevelopersEditLink Edit
WebDevelopersRemoveLink Remove
WebDevelopersSubmitLink Enviar
WebApplicationsHeader APLICACIONES
CommonResources
NOMBRE TEX TO
CommonStrings
NOMBRE TEX TO
ButtonLabelCancel Cancelar
ButtonLabelSave Save
PagerButtonLabelFirst Primero
PagerButtonLabelLast Último
PagerButtonLabelPrevious Anterior
CurtainLabelLoading Cargando...
ButtonLabelClose cierre
Documentation
NOMBRE TEX TO
DropdownOptionPrimaryKeyFormat Primary-{0}
DropdownOptionSecondaryKeyFormat Secondary-{0}
OAuth2GrantType_Implicit Implícita
TooltipTextHideRevealSecret Mostrar/ocultar
ButtonLinkOpenConsole Pruébelo
SectionHeadingResponse Response
FormLabelSubtextOptional opcional
ErrorPageStrings
NOMBRE TEX TO
LinkLabelBack atrás
IssuesStrings
NOMBRE TEX TO
WebIssuesIndexTitle Problemas
NotFoundStrings
NOMBRE TEX TO
ProductDetailsStrings
NOMBRE TEX TO
WebProductsSubscribeButton Suscribirse
LinkLabelChangeSubscriptionName cambiar
ButtonLabelConfirm Confirm
ProductsStrings
NOMBRE TEX TO
PageTitleProducts Productos
ProviderInfoStrings
NOMBRE TEX TO
SigninResources
NOMBRE TEX TO
TextboxLabelEmail Email
WebAuthenticationErrorNoticeHeader Error
TextboxLabelEmailFirstName Nombre
TextboxLabelEmailLastName Apellidos
WebAuthenticationPasswordLabel Contraseña
WebAuthenticationUserAlreadyRegisteredNoticeTitle Ya registrado
SigninStrings
NOMBRE TEX TO
SignupStrings
NOMBRE TEX TO
PageTitleSignup Suscripción
ButtonLabelSignup Suscripción
SubscriptionListStrings
NOMBRE TEX TO
WebDevelopersRegenerateLink Regenerar
ButtonLabelShowKey Presentación
ButtonLabelRenewSubscription Renovación
WebDevelopersSubscriptionRequestedState Solicitada
WebDevelopersSubscriptionTableNameHeader NOMBRE
WebDevelopersSubscriptionTableStateHeader Estado
SubscriptionPropertyLabelStartedDate Iniciado el
SubscriptionStrings
NOMBRE TEX TO
PageTitleDeveloperProfile Perfil
ButtonLabelHideKey Ocultar
ButtonLabelRegenerateKey Regenerar
ButtonLabelShowKey Presentación
UpdateProfileStrings
NOMBRE TEX TO
UserProfile
NOMBRE TEX TO
TextboxLabelEmail Email
TextboxLabelEmailFirstName Nombre
TextboxLabelEmailLastName Apellidos
SubscriptionStateActive Active
SubscriptionStateCancelled Cancelado
SubscriptionStateExpired Expirada
SubscriptionStateRejected Rechazada
SubscriptionStateRequested Solicitada
SubscriptionStateSuspended Suspended
Recursos de glifo
Las plantillas del portal para desarrolladores de API Management puede usar los glifos de Glyphicons de
Bootstrap. Este conjunto de glifos incluye más de 250 glifos en formato de fuente del conjunto Glyphicon
Halflings. Para utilizar un glifo de este conjunto, utilice la siguiente sintaxis.
<span class="glyphicon glyphicon-user">
Pasos siguientes
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Referencia de modelo de datos de la plantilla de
Azure API Management
23/07/2019 • 25 minutes to read • Edit Online
Este tema describe las representaciones de entidad y tipo de elementos comunes que se usan en los modelos de
datos en las plantillas de portal para desarrolladores de Azure API Management.
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Referencia
API
Resumen de API
Aplicación
Datos adjuntos
Código de ejemplo
Comment
Filtrado
Encabezado
Solicitud HTTP
Respuesta HTTP
Problema
operación
Menú de operaciones
Elemento de menú de operaciones
Paginación
Parámetro
Producto
Proveedor
Representación
Suscripción
Resumen de suscripción
Información de cuenta de usuario
Inicio de sesión de usuario
Registro de usuario
API
La entidad API tiene las siguientes propiedades:
{
"subscriptionKeyParameterNames":
{ "query":
“customQueryParameterName",
"header":
“customHeaderParameterName" } }
Resumen de API
La entidad API summary tiene las siguientes propiedades:
Application
La entidad application tiene las siguientes propiedades:
-0 - registrada
-1 - enviada
-2 - publicada
-3 - rechazada
-4 - no publicada
Datos adjuntos
La entidad attachment tiene las siguientes propiedades:
Código de ejemplo
PROPIEDAD ESCRIBA DESCRIPCIÓN
Comment
La entidad API tiene las siguientes propiedades:
Issue
La entidad issue tiene las siguientes propiedades.
Services Colección de entidades API. Las API a las que está suscrito el usuario
que archivó el problema.
Filtrado
La entidad filtering tiene las siguientes propiedades:
Header
Esta sección describe la representación de parameter .
HTTP Request
Esta sección describe la representación de request .
HTTP Response
Esta sección describe la representación de response .
Operation
La entidad operation tiene las siguientes propiedades:
Menú de operaciones
La entidad operation menu tiene las siguientes propiedades:
Paginación
La entidad paging tiene las siguientes propiedades:
Parameter
Esta sección describe la representación de parameter .
Product
La entidad product tiene las siguientes propiedades:
- 0 - Not Published
- 1 - Published
- 2 - Deleted
Provider
La entidad provider tiene las siguientes propiedades:
Representación
Representación
En esta sección se describe representation .
Subscription
La entidad subscription tiene las siguientes propiedades:
- 2 - expired : la suscripción ha
alcanzado su fecha de expiración y se ha
desactivado.
- 3 - submitted : el desarrollador ha
realizado una solicitud de suscripción,
pero esta aún no se ha aprobado ni
rechazado.
- 4 - rejected : un administrador ha
rechazado la solicitud de suscripción.
- 5 - cancelled : el desarrollador o el
administrador han cancelado la
suscripción.
Resumen de suscripción
La entidad subscription summary tiene las siguientes propiedades:
Suscripción de usuario
La entidad user sign up tiene las siguientes propiedades:
Pasos siguientes
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal para
desarrolladores de API Management mediante plantillas.
Controles de página de Azure API
Management
23/07/2019 • 5 minutes to read • Edit Online
Azure API Management proporciona los siguientes controles para su uso en las plantillas del portal
para desarrolladores.
Para usar un control, colóquelo en la ubicación deseada en la plantilla del portal para
desarrolladores. Algunos controles, como el control app-actions, tienen parámetros, como se
muestra en el ejemplo siguiente:
Los valores de los parámetros se pasan como parte del modelo de datos de la plantilla. En la
mayoría de los casos, puede pegarlos simplemente en el ejemplo proporcionado para cada control
para que funcione correctamente. Para más información sobre los valores de parámetros, puede
ver la sección del modelo de datos de cada plantilla en la que se puede usar un control.
Para más información sobre cómo trabajar con plantillas, consulte Cómo personalizar el portal
para desarrolladores de API Management mediante plantillas.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API
Management.
app-actions
El control app-actions proporciona una interfaz de usuario para la interacción con aplicaciones en
la página del perfil de usuario del portal para desarrolladores.
Uso
Parámetros
PARÁMETRO DESCRIPCIÓN
basic-signin
El control basic-signin ofrece un control para la recolección de información de inicio de sesión del
usuario en la página de inicio de sesión del portal para desarrolladores.
Uso
<basic-SignIn></basic-SignIn>
Parámetros
Ninguno.
Plantillas del portal para desarrolladores
El control basic-signin se puede usar en las siguientes plantillas del portal para desarrolladores:
Sign in
paging-control
El control paging-control proporciona funcionalidad de paginación en las páginas del portal para
desarrolladores que muestran una lista de elementos.
Uso
<paging-control></paging-control>
Parámetros
Ninguno.
Plantillas del portal para desarrolladores
El control paging-control se puede usar en las siguientes plantillas del portal para desarrolladores:
API list
Issue list
Product list
providers
El control providers proporciona un control para la selección de proveedores de autenticación en
la página de inicio de sesión del portal para desarrolladores.
Uso
<providers></providers>
Parámetros
Ninguno.
Plantillas del portal para desarrolladores
El control providers se puede usar en las siguientes plantillas del portal para desarrolladores:
Sign in
search-control
El control search-control proporciona funcionalidad de búsqueda en las páginas del portal para
desarrolladores que muestran una lista de elementos.
Uso
<search-control></search-control>
Parámetros
Ninguno.
Plantillas del portal para desarrolladores
El control search-control se puede usar en las siguientes plantillas del portal para desarrolladores:
API list
Product list
sign-up
El control sign-up proporciona un control para la recolección de información de perfil de usuario
en la página de inicio de sesión del portal para desarrolladores.
Uso
<sign-up></sign-up>
Parámetros
Ninguno.
Plantillas del portal para desarrolladores
El control sign-up se puede usar en las siguientes plantillas del portal para desarrolladores:
Sign up
subscribe-button
El control subscribe-button proporciona un control para la suscripción de un usuario a un
producto.
Uso
<subscribe-button></subscribe-button>
Parámetros
Ninguno.
Plantillas del portal para desarrolladores
El control subscribe-button se puede usar en las siguientes plantillas del portal para
desarrolladores:
Producto
subscription-cancel
El control subscription-cancel proporciona un control para la cancelación de una suscripción a un
producto en la página de perfil de usuario del portal para desarrolladores.
Uso
Parámetros
PARÁMETRO DESCRIPCIÓN
En Administración de API, los grupos se usan para administrar la visibilidad de productos para los
desarrolladores. Los productos son visibles en primer lugar para los grupos y luego los desarrolladores de dichos
grupos pueden ver y suscribirse a los productos asociados a los grupos.
API Management tiene los siguientes grupos invariables del sistema:
Administradores : los administradores de la suscripción de Azure son miembros de este grupo. Los
administradores controlan las instancias del servicio Administración de API y crean las API, las operaciones y
los productos que usan los desarrolladores.
Desarrolladores : los usuarios del portal para desarrolladores autenticados se incluyen en este grupo. Los
desarrolladores son los clientes que compilan aplicaciones con sus API. Los desarrolladores, después de que se
les concede acceso al portal para desarrolladores, crean aplicaciones que llaman a las operaciones de una API.
Invitados : a este grupo pertenecen los usuarios del portal para desarrolladores no autenticados como, por
ejemplo, clientes potenciales que visitan el portal para desarrolladores de una instancia de API Management.
Se les concede determinado acceso de solo lectura, como por ejemplo la posibilidad de ver API pero no
llamarlas.
Además de estos grupos del sistema, los administradores pueden crear grupos personalizados o aprovechar los
grupos externos en inquilinos de Azure Active Directory asociados. Los grupos personalizados y externos pueden
usarse junto con grupos del sistema en la concesión a los desarrolladores de visibilidad y acceso a productos de la
API. Por ejemplo, podría crear un grupo personalizado para los desarrolladores afiliados a una organización
asociada específica y permitirles el acceso a las API a partir de un producto que contenga solo las API relevantes.
Un usuario puede ser miembro de más de un grupo.
En esta guía se muestra cómo los administradores de una instancia de API Management pueden agregar nuevos
grupos y asociarlos a productos y desarrolladores.
Además de crear y administrar grupos en el portal del editor, puede crear y administrar sus grupos mediante la
entidad de grupo de la API de REST de administración.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Requisitos previos
Complete las tareas de este artículo: Creación de una instancia de Azure API Management.
TIP
Para agregar API Management a los favoritos en Azure Portal, seleccione la estrella.
Creación de un grupo
En esta sección se explica cómo agregar un nuevo grupo a la cuenta de API Management.
1. Seleccione la pestaña Grupos a la izquierda de la pantalla.
2. Haga clic en +Agregar.
3. Especifique un nombre único para el grupo y una descripción opcional.
4. Pulse Crear.
Una vez creado el grupo, se agrega a la lista Grupos.
Para editar el Nombre o la Descripción del grupo, haga clic en el nombre del grupo y en Configuración.
Para eliminar el grupo, haga clic en el nombre del grupo y después en Eliminar.
Ahora que se ha creado el grupo, se puede asociar a productos y desarrolladores.
Una vez asociado un producto a un grupo, los desarrolladores del grupo pueden ver el producto y suscribirse a él.
NOTE
Para agregar grupos de Azure Active Directory, consulte Autorización de las cuentas de desarrollador con Azure Active
Directory en Azure API Management.
Pasos siguientes
Una vez agregado a un grupo, un desarrollador puede ver los productos asociados al grupo y suscribirse a
ellos. Para obtener más información, consulte Creación y publicación de un producto en Azure API
Management.
Además de crear y administrar grupos en el portal del editor, puede crear y administrar sus grupos mediante la
entidad de grupo de la API de REST de administración.
Implementación de una instancia del servicio Azure
API Management en varias regiones de Azure
25/05/2018 • 7 minutes to read • Edit Online
Azure API Management admite la implementación en varias regiones, lo que permite a los publicadores de API
distribuir un único servicio Azure API Management en el número de regiones de Azure deseado. Esto ayuda a
reducir la latencia de solicitud que perciben los usuarios de API distribuidos geográficamente y, además, mejora
la disponibilidad del servicio en caso de que una región se quede sin conexión.
Inicialmente, un nuevo servicio Azure API Management contiene solo una unidad en una única región de Azure,
la región primaria. Pueden agregarse otras regiones fácilmente mediante Azure Portal. El servidor de puerta de
enlace de API Management se implementa en cada región y el tráfico de llamada se enruta a la puerta de enlace
más cercana en términos de latencia. Cuando una región se queda sin conexión, el tráfico se redirige
automáticamente a la siguiente puerta de enlace más cercana.
NOTE
Azure API Management replica solo el componente de la puerta de enlace de API entre regiones. El componente de
administración de servicio se hospeda solo en la región primaria. En caso de interrupción en la región primaria, no se
pueden aplicar cambios de configuración en una instancia del servicio Azure API Management, incluidas las configuraciones
y las actualizaciones de directivas.
Disponibilidad
IMPORTANT
Esta característica solo está disponible en el nivel Premium de API Management.
En Azure Portal, vaya a la página de escala y precios de su instancia de servicio de API Management.
Para implementar en una nueva región, haga clic en + Agregar región desde la barra de herramientas.
Seleccione la ubicación en la lista desplegable y establezca el número de unidades para el control deslizante.
4. Use set-backend en combinación con directivas choose condicionales para construir una directiva de
enrutamiento adecuada en la sección <inbound> </inbound> del archivo.
Por ejemplo, el siguiente archivo XML sería válido para las regiones Oeste de Estados Unidos y Asia
oriental:
<policies>
<inbound>
<base />
<choose>
<when condition="@("West US".Equals(context.Deployment.Region,
StringComparison.OrdinalIgnoreCase))">
<set-backend-service base-url="http://contoso-us.com/" />
</when>
<when condition="@("East Asia".Equals(context.Deployment.Region,
StringComparison.OrdinalIgnoreCase))">
<set-backend-service base-url="http://contoso-asia.com/" />
</when>
<otherwise>
<set-backend-service base-url="http://contoso-other.com/" />
</otherwise>
</choose>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
TIP
También puede adelantar sus servicios de back-end con Azure Traffic Manager, dirigir las llamadas de las API a
Traffic Manager y dejar que resuelva el enrutamiento automáticamente.
Azure Event Hubs es un servicio de introducción de datos altamente escalable que permite la introducción de
millones de eventos por segundo para que pueda procesar y analizar grandes cantidades de datos generados por
los dispositivos y aplicaciones conectados. Event Hubs actúa como la "puerta principal" de una canalización de
eventos y, una vez que los datos se recopilan en un centro de eventos, se pueden transformar y almacenar con
cualquier proveedor de análisis en tiempo real o adaptadores de procesamiento por lotes/almacenamiento. Event
Hubs desacopla la producción de un flujo de eventos desde el consumo de los eventos, para que los
consumidores de eventos pueden tener acceso a los eventos según su propia programación.
Este artículo es un complemento del vídeo Integración de Azure API Management con Event Hubs y describe
cómo registrar eventos de API Management mediante Azure Event Hubs.
Al realizar la solicitud, si se crea el registrador, se devuelve un código de estado 201 Created . A continuación se
muestra una respuesta de ejemplo basada en la solicitud de ejemplo anterior.
{
"id": "/loggers/{new logger name}",
"loggerType": "azureEventHub",
"description": "Sample logger description",
"credentials": {
"name": "Name of the Event Hub from the Portal",
"connectionString": "{{Logger-Credentials-xxxxxxxxxxxxxxx}}"
},
"isBuffered": true,
"resourceId": null
}
NOTE
Para conocer otros posibles códigos de retorno y sus razones, vea Creación de un registrador. Para conocer la forma de
realizar otras operaciones como crear listas, actualizar y eliminar, consulte la documentación de la entidad del registrador.
Reemplace logger-id con el valor que utilizó para {new logger name} en la dirección URL para crear el
registrador en el paso anterior.
Puede usar cualquier expresión que devuelva una cadena como valor para el elemento log-to-eventhub . En este
ejemplo, se registra una cadena que contiene la fecha y la hora, el nombre del servicio, el identificador de la
solicitud, la dirección IP de la solicitud y el nombre de la operación.
Haga clic en Guardar para guardar la configuración de la directiva actualizada. En el momento de guardarla, la
directiva se activa y los eventos se registran en el centro de eventos designado.
Pasos siguientes
Obtenga más información acerca de Azure Event Hubs
Introducción a Azure Event Hubs
Recepción de mensajes con EventProcessorHost
Guía de programación de Event Hubs
Obtener más información acerca de la integración de API Management y Event Hubs
Referencia de entidad del registrador
referencia de la directiva log-to-eventhub
Supervisión de las API con Azure API Management, Event Hubs y Moesif
Obtenga más información acerca de la integración con Azure Application Insights
Cómo integrar Azure API Management con Azure
Application Insights
23/07/2019 • 9 minutes to read • Edit Online
Azure API Management le permite una integración sencilla con Azure Application Insights, un servicio extensible
para desarrolladores web que compilan y administran aplicaciones en varias plataformas. En esta guía, verá todos
los pasos para dicha integración; además, se describen las estrategias para reducir el impacto en el rendimiento en
la instancia de servicio de API Management.
Requisitos previos
Para seguir esta guía, debe tener una instancia de Azure API Management. Si no tiene una, complete antes el
tutorial.
4. Seleccione la instancia de Application Insights creada anteriormente y escriba una descripción breve.
5. Haga clic en Create(Crear).
6. Acaba de crear un registrador de Azure Application Insights con una clave de instrumentación. Ahora debería
aparecer en la lista.
NOTE
En segundo plano, se crea una entidad Logger en la instancia de API Management, que contiene la clave de instrumentación
de la instancia de Application Insights.
WARNING
Reemplazar el valor predeterminado 0 en el campo First bytes of body (Primeros bytes del cuerpo) puede disminuir
considerablemente el rendimiento de las API.
NOTE
En segundo plano, se crea una entidad de diagnóstico denominada "applicationinsights" en el nivel de API.
Opciones básicas: Primeros bytes del integer Especifica cuántos primeros bytes del
cuerpo cuerpo se registrarán en Azure
Application Insights para las solicitudes
y las respuestas. Predeterminado: el
cuerpo no se registra.
En función de las pruebas de carga internas, habilitar esta característica provocó una reducción del 40 % al 50 %
en el rendimiento cuando la tasa de solicitudes superaba las 1000 solicitudes por segundo. Azure Application
Insights está diseñada para usar análisis estadísticos para evaluar el rendimiento de las aplicaciones. No está
destinado a ser un sistema de auditoría y no es apta para registrar cada solicitud individual para API de gran
volumen.
Para manipular el número de solicitudes que se registran, puede ajustar la opción Sampling (Muestreo) que se
explica anteriormente. Un valor del 100 % significa que se registran todas las solicitudes, mientras que un 0 %
indica que no se registra nada en absoluto. Sampling (Muestreo) ayuda a reducir el volumen de telemetría, lo que
evita de manera eficaz una degradación significativa en el rendimiento, a la vez que brinda las ventajas del registro.
Omitir el registro de encabezados y del cuerpo de las solicitudes y respuestas también tendrá un efecto positivo
para evitar problemas de rendimiento.
Vídeo
Pasos siguientes
Más información sobre Azure Application Insights.
Tenga en cuenta el registro con Azure Event Hubs.
Procedimiento para implementar la recuperación
ante desastres mediante copias de seguridad y
restauración del servicio en Azure API Management
25/05/2018 • 17 minutes to read • Edit Online
Si publica y administra las API a través de Azure API Management, podrá aprovechar numerosas funcionalidades
de infraestructura y tolerancia a errores que, de lo contrario, debería diseñar, implementar y administrar de manera
manual. La plataforma Azure mitiga una gran cantidad de posibles errores a un costo reducido.
Para recuperarse de problemas de disponibilidad que afectan la región que hospeda el servicio de API
Management, esté preparado para reconstituir el servicio en otra región en cualquier momento. Según el objetivo
de tiempo de recuperación, puede que quiera mantener un servicio en espera en una o varias regiones. También,
puede que quiera intentar mantener sincronizados la configuración y el contenido con el servicio activo según el
objetivo de punto de recuperación. Las características de copia de seguridad y restauración del servicio ofrecen los
bloques de creación necesarios para implementar una estrategia de recuperación ante desastres.
Las operaciones de copia de seguridad y restauración también pueden usarse para replicar la configuración del
servicio API Management entre entornos operativos, por ejemplo, desarrollo y almacenamiento provisional. Sepa
que los datos del entorno de ejecución, como los usuarios y las suscripciones, también se copiarán, lo que no
siempre podría ser deseable.
En esta guía se muestra cómo automatizar las operaciones de copia de seguridad y restauración y cómo garantizar
la correcta autenticación de las solicitudes de copia de seguridad y restauración mediante Azure Resource
Manager.
IMPORTANT
La operación de restauración no cambia la configuración del nombre de host personalizado del servicio de destino. Se
recomienda usar el mismo nombre de host personalizado y el mismo certificado TLS para los servicios activos y en espera, de
modo que, una vez finalizada la operación de restauración, el tráfico pueda redirigirse a la instancia en espera mediante un
simple cambio de DNS CNAME.
La operación de copia de seguridad no captura los datos de registro previamente agregados usados en los informes
mostrados en la hoja Analytics de Azure Portal.
WARNING
Cada copia de seguridad expira después de treinta días. Si intenta restaurar una copia de seguridad una vez transcurrido el
período de expiración de treinta días, se producirá un error en la restauración con un mensaje
Cannot restore: backup expired .
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Todas las tareas que se realizan en los recursos mediante Azure Resource Manager deben autenticarse con Azure
Active Directory con los siguientes pasos:
Agregue una aplicación al inquilino de Azure Active Directory.
Establezca permisos para la aplicación que ha agregado.
Obtenga el token para autenticar solicitudes al Administrador de recursos de Azure.
Creación de una aplicación de Azure Active Directory
1. Inicie sesión en el Azure Portal.
2. Mediante la suscripción que contiene la instancia del servicio API Management, vaya a la pestaña
Registros de aplicaciones de Azure Active Directory (Azure Active Directory > Administrar/Registros
de aplicaciones).
NOTE
Si el directorio predeterminado de Azure Active Directory no está visible en su cuenta, póngase en contacto con el
administrador de la suscripción de Azure para que le conceda los permisos necesarios para su cuenta.
7. Haga clic en Permisos delegados al lado de la aplicación recién agregada, active la casilla Access Azure
Service Management (preview) [Acceso a Azure Service Management (versión preliminar)].
8. Haga clic en Seleccionar.
9. Haga clic en Concesión de permisos.
Configuración de la aplicación
Antes de llamar a las API que generan la copia de seguridad y la restauran, debe obtener un token. En el ejemplo
siguiente se utiliza el paquete de NuGet Microsoft.IdentityModel.Clients.ActiveDirectory para recuperar el token.
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System;
namespace GetTokenResourceManagerRequests
{
class Program
{
static void Main(string[] args)
{
var authenticationContext = new AuthenticationContext("https://login.microsoftonline.com/{tenant
id}");
var result = authenticationContext.AcquireTokenAsync("https://management.azure.com/", "
{application id}", new Uri("{redirect uri}"), new PlatformParameters(PromptBehavior.Auto)).Result;
if (result == null) {
throw new InvalidOperationException("Failed to obtain the JWT token");
}
Console.WriteLine(result.AccessToken);
Console.ReadLine();
}
}
}
Reemplace {tenant id} , {application id} y {redirect uri} mediante las siguientes instrucciones:
1. Reemplace {tenant id} por el identificador del inquilino de la aplicación de Azure Active Directory que se
creó. Para acceder al identificador, haga clic en Registros de aplicaciones -> Puntos de conexión.
POST
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Micro
soft.ApiManagement/service/{serviceName}/backup?api-version={api-version}
donde:
subscriptionId : identificador de la suscripción que contiene el servicio API Management del que intenta crear
una copia de seguridad
resourceGroupName : nombre del grupo de recursos del servicio Azure API Management
serviceName : el nombre del servicio API Management del que desea crear una copia de seguridad que se
especificó durante su creación
api-version : reemplazar por 2018-06-01-preview
En el cuerpo de la solicitud, especifique el nombre de la copia de seguridad, el nombre del contenedor de blobs, la
clave de acceso y el nombre de la cuenta de almacenamiento de Azure de destino:
{
"storageAccount": "{storage account name for the backup}",
"accessKey": "{access key for the account}",
"containerName": "{backup container name}",
"backupName": "{backup blob name}"
}
POST
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Micro
soft.ApiManagement/service/{serviceName}/restore?api-version={api-version}
donde:
subscriptionId : identificador de la suscripción que contiene el servicio API Management en el que se restaura
una copia de seguridad.
resourceGroupName : nombre del grupo de recursos que contiene el servicio Azure API Management en el que
se restaura una copia de seguridad.
serviceName : el nombre del servicio API Management que desea restaurar que se especificó durante su
creación.
api-version : reemplazar por 2018-06-01-preview
En el cuerpo de la solicitud, especifique la ubicación del archivo de copia de seguridad. Es decir, agregue el nombre
de la cuenta de almacenamiento de Azure, la clave de acceso, el nombre del contenedor de blob y el nombre de la
copia de seguridad:
{
"storageAccount": "{storage account name for the backup}",
"accessKey": "{access key for the account}",
"containerName": "{backup container name}",
"backupName": "{backup blob name}"
}
NOTE
También se pueden realizar operaciones de copia de seguridad y restauración con los comandos Backup-AzApiManagement
y Restore-AzApiManagement de PowerShell, respectivamente.
Pasos siguientes
Consulte los recursos siguientes para ver distintos tutoriales del proceso de copia de seguridad y restauración.
Replicate Azure API Management Accounts (Réplica de cuentas de Administración de API de Azure)
Automating API Management Backup and Restore with Logic Apps (Automatización de la copia de seguridad y
restauración de API Management con Logic Apps)
Azure API Management: Backing Up and Restoring Configuration (Azure API Management: copia de
seguridad y restauración de la configuración) El enfoque detallado por Stuart no coincide con la orientación
oficial, pero es interesante.
Administración de cuentas de usuario en Azure API
Management
25/05/2018 • 5 minutes to read • Edit Online
En Administración de API, los desarrolladores son los usuarios de las API que se exponen mediante
Administración de API. En esta guía se muestra cómo crear desarrolladores e invitarlos a usar las API y los
productos que usted pone a su disposición con la instancia de API Management. Para obtener información acerca
de cómo administrar cuentas de usuario mediante programación, consulte la documentación de Entidad de
usuario en la referencia sobre REST de API Management.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
Requisitos previos
Complete las tareas de este artículo: Creación de una instancia de Azure API Management.
TIP
Para agregar API Management a los favoritos en Azure Portal, seleccione la estrella.
Creación de un desarrollador
Para agregar un nuevo usuario, siga los pasos descritos en esta sección:
1. Seleccione la pestaña Usuarios a la izquierda de la pantalla.
2. Presione +Agregar.
3. Especifique la información correspondiente al usuario.
4. Presione Agregar.
De forma predeterminada, las cuentas de desarrollador recién creadas se encuentran en estado Activo y se
asocian al grupo Desarrolladores. Las cuentas de desarrollador que se encuentran en estado activo se pueden
usar para obtener acceso a todas las API para las que tienen suscripciones. Para asociar el desarrollador recién
creado a otros grupos, consulte Asociación de grupos a desarrolladores.
Invitación a un desarrollador
Para invitar a un desarrollador, siga los pasos descritos en esta sección:
1. Seleccione la pestaña Usuarios a la izquierda de la pantalla.
2. Presione +Invitar.
Se mostrará un mensaje de confirmación, pero el desarrollador recién invitado no aparecerá en la lista hasta que
acepte la invitación.
Cuando se invita a un desarrollador, se le envía un correo electrónico. Este correo electrónico se genera con una
plantilla y se puede personalizar. Para obtener más información, consulte Configuración de plantillas de correo
electrónico.
Una vez aceptada la invitación, la cuenta se activa.
Desactivación o reactivación de una cuenta de desarrollador
De forma predeterminada, las cuentas de desarrollador recién creadas o a las que se ha invitado se encuentran en
estado Activo. Para desactivar una cuenta de desarrollador, haga clic en Bloquear. Para reactivar una cuenta de
desarrollador bloqueada, haga clic en Activar. Una cuenta de desarrollador bloqueada no puede obtener acceso al
portal para desarrolladores ni llamar a ninguna API. Para eliminar una cuenta de usuario, haga clic en Eliminar.
Para bloquear a un usuario, siga los siguientes pasos.
1. Seleccione la pestaña Usuarios a la izquierda de la pantalla.
2. Haga clic en el usuario que quiera bloquear.
3. Presione Bloquear.
Pasos siguientes
Una vez creada una cuenta de desarrollador, se puede asociar a roles y suscribirse a productos y API. Para obtener
más información, consulte Creación y uso de grupos.
Guardado y configuración del servicio Administración
de API mediante Git
25/05/2018 • 21 minutes to read • Edit Online
Cada instancia del servicio Administración de API mantiene una base de datos de configuración que contiene
información sobre la configuración y los metadatos de la instancia del servicio. Es posible hacer cambios en la
instancia del servicio; para ello, modifique un valor en Azure Portal con un cmdlet de PowerShell o realice una
llamada de API REST. Pero esto no es todo, también puede administrar la configuración de la instancia del servicio
con Git, con lo que se posibilitan escenarios de administración de servicio como los siguientes:
Control de versiones de configuración: descargue y almacene versiones diferentes de la configuración del
servicio
Cambios masivos en la configuración: realice cambios en varios ajustes de la configuración del servicio en el
repositorio local e integre los cambios de nuevo en el servidor con una sola operación
Cadena de herramientas y flujo de trabajo familiares de Git: use las herramientas y los flujos de trabajo de Git
con los que ya está familiarizado
El diagrama siguiente muestra de forma global los distintos modos de configurar la instancia del servicio de API
Management.
Cuando hace cambios en el servicio mediante Azure Portal, los cmdlets de PowerShell o la API REST, está
administrando la base de datos de configuración del servicio mediante el punto de conexión
https://{name}.management.azure-api.net , tal como se muestra en el lado derecho del diagrama. En el lado
izquierdo del diagrama se muestra cómo administrar la configuración del servicio mediante Git y el repositorio de
Git para el servicio ubicado en https://{name}.scm.azure-api.net .
Los pasos siguientes proporcionan una visión general sobre el proceso de administración de la instancia del
servicio de API Management mediante Git.
1. Acceso a la configuración de Git en el servicio
2. Guardar la base de datos de configuración del servicio en el repositorio de Git
3. Clonar el repositorio de Git en el equipo local
4. Desplegar el repositorio más reciente en el equipo local, y confirmar e insertar los cambios de nuevo en el
repositorio
5. Implementar los cambios desde el repositorio en la base de datos de configuración del servicio
Este artículo describe cómo habilitar y usar Git para administrar la configuración del servicio y sirve como
referencia para los archivos y las carpetas del repositorio Git.
Disponibilidad
IMPORTANT
Esta característica está disponible en los niveles Premium, Estándar, Básico y Desarrollador de API Management.
IMPORTANT
Los secretos que no estén definidos como valores con nombre se almacenará en el repositorio y permanecerán en su
historial hasta que deshabilitar y volver a habilitar el acceso de Git. Valores con nombre proporcionan un lugar seguro para
administrar los valores de cadena constante, como los secretos, a través de toda la configuración de la API y las directivas,
por lo que no tiene que almacenarlos directamente en las instrucciones de directiva. Para obtener más información, consulte
cómo usar los valores con nombre en las directivas de Azure API Management.
Para obtener información sobre la habilitación o la deshabilitación del acceso de Git mediante la API de REST,
consulte Enable or disable Git access using the REST API(Habilitación o deshabilitación del acceso de Git
mediante la API de REST).
IMPORTANT
Anote esta contraseña. Una vez que salga de esta página, la contraseña no se volverá a mostrar.
En los ejemplos siguientes se usa la herramienta Git Bash desde Git para Windows , pero puede usar cualquier
herramienta de Git con la que esté familiarizado.
Abra su herramienta Git en la carpeta deseada y ejecute el siguiente comando para clonar el repositorio de git en
el equipo local, usando para ello el comando incluido en Azure Portal.
Si de este modo aparece un error, pruebe a codificar como dirección URL la parte de la contraseña del comando.
Una manera rápida de hacer esto es abrir Visual Studio y emitir el siguiente comando en la Ventana Inmediato.
Para abrir la Ventana Inmediato, abra cualquier solución o proyecto en Visual Studio (o cree una aplicación de
consola vacía) y elija Ventanas, Inmediato en el menú Depurar.
?System.NetWebUtility.UrlEncode("password from the Azure portal")
Utilice la contraseña codificada junto con su nombre de usuario y ubicación de repositorio para construir el
comando git.
Una vez que se clone el repositorio, podrá ver y trabajar con él en el sistema de archivos local. Para más
información, consulte Referencia de estructura de archivo y carpeta del repositorio local de Git.
git pull
Antes de ejecutar git pull , asegúrese de que se encuentra en la carpeta del repositorio local. Si acaba de
completar el comando git clone , debe cambiar el directorio a su repositorio ejecutando un comando similar al
siguiente.
cd {name}.scm.azure-api.net/
git push
ITEM DESCRIPCIÓN
carpeta raíz de la administración de API Contiene la configuración de nivel superior para la instancia de
servicio
Cada carpeta puede contener uno o varios archivos y, en algunos casos, una o varias carpetas; por ejemplo, una
carpeta para cada API, producto o grupo. Los archivos dentro de cada carpeta son específicos del tipo de entidad
descrito por el nombre de la carpeta.
Estos archivos se pueden crear, eliminar, editar y administrar en el sistema de archivos local, y los cambios se
pueden implementar de nuevo en la instancia de servicio de API Management.
NOTE
Las siguientes entidades no están en el repositorio de Git y no se pueden configurar mediante Git.
Usuarios
Suscripciones
Valores con nombre
Entidades del portal de desarrolladores distintas de los estilos
{
"settings": {
"RegistrationEnabled": "True",
"UserRegistrationTerms": null,
"UserRegistrationTermsEnabled": "False",
"UserRegistrationTermsConsentRequired": "False",
"DelegationEnabled": "False",
"DelegationUrl": "",
"DelegatedSubscriptionEnabled": "False",
"DelegationValidationKey": "",
"RequireUserSigninEnabled": "false"
},
"$ref-policy": "api-management/policies/global.xml"
}
El valor final, $ref-policy , se asigna al archivo de instrucciones de directiva global para la instancia de servicio.
carpeta de API
La carpeta apis contiene una carpeta para cada API de la instancia de servicio, que contiene los elementos
siguientes.
apis\<api name>\configuration.json : es la configuración de la API y contiene información acerca de la
dirección URL del servicio back-end y las operaciones. Se trata de la misma información que se devolvería si se
llamase a Obtener una API específica con export=true en formato application/json .
apis\<api name>\api.description.html : es la descripción de la API y corresponde a la propiedad description
de la entidad de API.
apis\<api name>\operations\ : esta carpeta contiene archivos <operation name>.description.html que se asignan
a las operaciones de la API. Cada archivo contiene la descripción de una única operación en la API, que se
asigna a la propiedad description de la entidad de operación en la API de REST.
carpeta de grupos
La carpeta groups contiene una carpeta para cada grupo definido en la instancia de servicio.
groups\<group name>\configuration.json : es la configuración para el grupo. Se trata de la misma información
que se devolvería si se llamase a la operación Obtener un grupo específico .
groups\<group name>\description.html : es la descripción del grupo y corresponde a la propiedad description
de la entidad de servicio.
carpeta de directivas
La carpeta policies contiene las instrucciones de directiva para la instancia de servicio.
policies\global.xml : contiene las directivas definidas en el ámbito global para la instancia de servicio.
policies\apis\<api name>\ : si tiene directivas definidas en el ámbito de la API, se encuentran en esta carpeta.
Carpeta policies\apis\<api name>\<operation name>\ : si tiene directivas definidas en el ámbito de la operación,
se encuentran en esta carpeta en archivos <operation name>.xml que se asignan a las instrucciones de directiva
para cada operación.
policies\products\ : si tiene directivas definidas en el ámbito del producto, se encuentran esta carpeta, que
contiene archivos <product name>.xml que se asignan a las instrucciones de directiva para cada producto.
carpeta portalStyles
La carpeta portalStyles contiene la configuración y las hojas de estilo para las personalizaciones del portal para
desarrolladores de la instancia de servicio.
portalStyles\configuration.json : contiene los nombres de las hojas de estilos usadas por el portal de
desarrolladores
portalStyles\<style name>.css : cada archivo <style name>.css contiene estilos para el portal para
desarrolladores ( Preview.css y Production.css de forma predeterminada).
carpeta de productos
La carpeta products contiene una carpeta para cada producto que se define en la instancia de servicio.
products\<product name>\configuration.json : es la configuración del producto. Se trata de la misma
información que se devolvería si se llamase a la operación Obtener un producto específico .
products\<product name>\product.description.html : es la descripción del producto y corresponde a la propiedad
description de la entidad de producto de la API de REST.
plantillas
La carpeta templates contiene la configuración para las plantillas de correo electrónico de la instancia de servicio.
<template name>\configuration.json : es la configuración de la plantilla de correo electrónico.
<template name>\body.html : es el cuerpo de la plantilla de correo electrónico.
Pasos siguientes
Para obtener información sobre otras formas de administrar la instancia de servicio, consulte:
Administrar la instancia de servicio con los siguientes cmdlets de PowerShell
Azure API Management Deployment Management Cmdlets (Cmdlets de administración de la
implementación de Administración de API de Azure)
Azure API Management Service Management Cmdlets (Cmdlets de administración del servicio
Administración de API de Azure)
Administrar la instancia de servicio mediante la API de REST
API Management REST API (API de REST de Administración de API)
Uso del control de acceso basado en rol en Azure API
Management
29/07/2019 • 7 minutes to read • Edit Online
Azure API Management utiliza el control de acceso basado en rol (RBAC ) de Azure para permitir que pueda
hacerse una administración de acceso detallada en servicios y entidades de API Management (por ejemplo, API y
directivas). En este artículo se proporciona información general de los roles integrados y personalizados en API
Management. Para más información sobre la administración de acceso en Azure Portal, consulte la introducción
sobre la administración de acceso en Azure Portal.
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module (Presentación
del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az, consulte
Instalación de Azure PowerShell.
Roles integrados
Actualmente, API Management cuenta con tres roles integrados y próximamente agregará otros dos. Estos roles
pueden asignarse en distintos ámbitos, como la suscripción, el grupo de recursos y la instancia concreta de API
Management. Por ejemplo, si el rol "Azure API Management Service Reader" se asigna a un usuario en el nivel de
grupo de recursos, el usuario tendrá acceso de lectura a todas las instancias de API Management incluidas en el
grupo de recursos.
En la tabla siguiente se proporcionan breves descripciones de los roles integrados. Estos roles se pueden asignar a
través de Azure Portal u otras herramientas, como Azure PowerShell, la CLI de Azure y la API de REST. Para
obtener detalles sobre la asignación de roles integrados, consulte Uso de asignaciones de roles para administrar el
acceso a los recursos de la suscripción de Azure.
CREACIÓN,
ELIMINACIÓN Y
ESCALADO DEL
SERVICIO, VPN Y
CONFIGURACIÓN ACCESO AL PORTAL
ACCESO DE ACCESO DE PERSONALIZADA DEL EDITOR
ROL LECTURA[1] ESCRITURA[2] DE DOMINIOS HEREDADO DESCRIPCIÓN
Colaborador de ✓ ✓ ✓ ✓ Superusuario.
servicio de Azure Tiene acceso
API Management CRUD completo a
los servicios y a
las entidades de
API Management
(por ejemplo, API
y directivas).
Tiene acceso al
portal del editor
heredado.
CREACIÓN,
ELIMINACIÓN Y
ESCALADO DEL
SERVICIO, VPN Y
CONFIGURACIÓN ACCESO AL PORTAL
ACCESO DE ACCESO DE PERSONALIZADA DEL EDITOR
ROL LECTURA ESCRITURA DE DOMINIOS HEREDADO DESCRIPCIÓN
Operador de ✓ ✓ Puede
servicio de Azure administrar
API Management servicios de API
Management,
pero no
entidades.
Administrador de ✓ ✓ Puede
contenido de administrar el
Azure API portal del
Management* desarrollador.
Acceso de solo
lectura a servicios
y entidades.
[1] Acceso de lectura a los servicios y entidades de API Management (por ejemplo, API y directivas)
[2] Acceso de escritura a los servicios y identidades de API Management, excepto las operaciones siguientes: creación, eliminación y escalado de
instancias; configuración de VPN, y configuración personalizada de dominios
* El rol Service Editor estará disponible cuando se realice la migración de toda la interfaz de usuario de administración desde el portal del editor
existente a Azure Portal. El rol Content Manager estará disponible después de que el portal del editor se refactorice, de modo que solo contenga
funcionalidades relacionadas con la administración del portal del desarrollador.
Roles personalizados
Si ninguno de los roles integrados satisface sus necesidades específicas, se pueden crear roles personalizados para
proporcionar administración de acceso más pormenorizada para entidades de API Management. Por ejemplo,
puede crear un rol personalizado que tenga acceso de solo lectura a un servicio de API Management, pero que
tenga acceso de escritura solamente a una API específica. Para más información sobre los roles personalizados,
consulte Roles personalizados para RBAC de Azure.
NOTE
Para poder ver una instancia de API Management en Azure Portal, un rol personalizado debe incluir la acción
Microsoft.ApiManagement/service/read .
A la hora de crear un rol personalizado, es más fácil comenzar con uno de los roles integrados. Edite los atributos
para agregar los elementos Actions, NotActions o AssignableScopes y guarde los cambios como un nuevo rol.
El ejemplo siguiente comienza con el rol "Azure API Management Service Reader" y crea un rol personalizado
denominado "Calculator API Editor". Puede asignar el rol personalizado a una API concreta. De ese modo, el rol
solamente tendrá acceso a esa API.
El artículo Operaciones del proveedor de recursos de Azure Resource Manager contiene la lista de permisos que se
pueden conceder en el nivel de API Management.
Vídeo
Pasos siguientes
Para más información sobre el control de acceso basado en rol de Azure, consulte los siguientes artículos:
Introducción a la administración de acceso en Azure Portal
Uso de asignaciones de roles para administrar el acceso a los recursos de la suscripción de Azure
Roles personalizados para RBAC de Azure
Operaciones del proveedor de recursos de Azure Resource Manager
Uso de identidades administradas en Azure API
Management
23/07/2019 • 6 minutes to read • Edit Online
En este artículo se muestra cómo crear una identidad administrada para una instancia de servicio de API
Management y cómo acceder a otros recursos. Una identidad administrada generada por Azure Active Directory
(Azure AD ) permite a la instancia de API Management acceder de forma fácil y segura a otros recursos protegidos
de Azure AD, como Azure Key Vault. Esta identidad está administrada por Azure y no requiere que aprovisione o
rote los secretos. Para más información sobre las identidades administradas, consulte el artículo sobre qué son las
identidades administradas para recursos de Azure.
Esto indica a Azure que debe crear y administrar la identidad para la instancia de API Management.
Por ejemplo, una plantilla de Azure Resource Manager completa podría tener el aspecto siguiente:
{
"$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "0.9.0.0",
"resources": [{
"apiVersion": "2017-03-01",
"name": "contoso",
"type": "Microsoft.ApiManagement/service",
"location": "[resourceGroup().location]",
"tags": {},
"sku": {
"name": "Developer",
"capacity": "1"
},
"properties": {
"publisherEmail": "[email protected]",
"publisherName": "Contoso"
},
"identity": {
"type": "systemAssigned"
}
}]
}
IMPORTANT
Si no se proporciona la versión del objeto del certificado, API Management obtiene automáticamente la versión más reciente
del certificado una vez cargado a Key Vault.
En el ejemplo siguiente se muestra una plantilla de Azure Resource Manager que contiene los siguientes pasos:
1. Creación de una instancia de API Management con una identidad administrada.
2. Actualización de las directivas de acceso de una instancia de Azure Key Vault y permiso para que la instancia de
API Management obtenga secretos de ella.
3. Actualización de la instancia de API Management estableciendo un nombre de dominio personalizado mediante
un certificado de la instancia de Key Vault.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"publisherEmail": {
"type": "string",
"minLength": 1,
"metadata": {
"description": "The email address of the owner of the service"
}
},
"publisherName": {
"type": "string",
"defaultValue": "Contoso",
"minLength": 1,
"metadata": {
"description": "The name of the owner of the service"
}
},
"sku": {
"type": "string",
"allowedValues": ["Developer",
"Standard",
"Premium"],
"defaultValue": "Developer",
"metadata": {
"description": "The pricing tier of this API Management service"
}
},
"skuCount": {
"type": "int",
"defaultValue": 1,
"metadata": {
"description": "The instance size of this API Management service."
}
},
"keyVaultName": {
"type": "string",
"metadata": {
"description": "Name of the vault"
}
},
"proxyCustomHostname1": {
"type": "string",
"metadata": {
"description": "Proxy Custom hostname."
}
},
"keyVaultIdToCertificate": {
"type": "string",
"metadata": {
"description": "Reference to the KeyVault certificate.
https://contoso.vault.azure.net/secrets/contosogatewaycertificate."
}
}
},
"variables": {
"apiManagementServiceName": "[concat('apiservice', uniqueString(resourceGroup().id))]",
"apimServiceIdentityResourceId": "[concat(resourceId('Microsoft.ApiManagement/service',
variables('apiManagementServiceName')),'/providers/Microsoft.ManagedIdentity/Identities/default')]"
},
"resources": [{
"apiVersion": "2017-03-01",
"name": "[variables('apiManagementServiceName')]",
"type": "Microsoft.ApiManagement/service",
"location": "[resourceGroup().location]",
"tags": {
},
"sku": {
"name": "[parameters('sku')]",
"capacity": "[parameters('skuCount')]"
},
"properties": {
"publisherEmail": "[parameters('publisherEmail')]",
"publisherName": "[parameters('publisherName')]"
},
"identity": {
"type": "systemAssigned"
}
},
{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "[concat(parameters('keyVaultName'), '/add')]",
"apiVersion": "2015-06-01",
"dependsOn": [
"[resourceId('Microsoft.ApiManagement/service', variables('apiManagementServiceName'))]"
],
"properties": {
"accessPolicies": [{
"tenantId": "[reference(variables('apimServiceIdentityResourceId'), '2015-08-31-
PREVIEW').tenantId]",
"objectId": "[reference(variables('apimServiceIdentityResourceId'), '2015-08-31-
PREVIEW').principalId]",
"permissions": {
"secrets": ["get"]
}
}]
}
},
{
"apiVersion": "2017-05-10",
"name": "apimWithKeyVault",
"type": "Microsoft.Resources/deployments",
"dependsOn": [
"[resourceId('Microsoft.ApiManagement/service', variables('apiManagementServiceName'))]"
"[resourceId('Microsoft.ApiManagement/service', variables('apiManagementServiceName'))]"
],
"properties": {
"mode": "incremental",
"templateLink": {
"uri": "https://raw.githubusercontent.com/solankisamir/arm-
templates/master/basicapim.keyvault.json",
"contentVersion": "1.0.0.0"
},
"parameters": {
"publisherEmail": { "value": "[parameters('publisherEmail')]"},
"publisherName": { "value": "[parameters('publisherName')]"},
"sku": { "value": "[parameters('sku')]"},
"skuCount": { "value": "[parameters('skuCount')]"},
"proxyCustomHostname1": {"value" : "[parameters('proxyCustomHostname1')]"},
"keyVaultIdToCertificate": {"value" : "[parameters('keyVaultIdToCertificate')]"}
}
}
}]
}
Pasos siguientes
Obtenga más información sobre las identidades administradas para recursos de Azure:
¿Qué son las identidades administradas de recursos de Azure?
Plantillas del Administrador de recursos de Azure
Autenticación con una identidad administrada en una directiva
Información general de Service Fabric con Azure API
Management
23/07/2019 • 14 minutes to read • Edit Online
Las aplicaciones en la nube normalmente necesitan una puerta de enlace front-end para proporcionar un único
punto de entrada para usuarios, dispositivos u otras aplicaciones. En Service Fabric, una puerta de enlace puede
ser cualquier servicio sin estado como una aplicación ASP.NET Core u otro servicio designado para la entrada de
tráfico, como Event Hubs, IoT Hub o Azure API Management.
Este artículo es una introducción al uso de Azure API Management como puerta de enlace para las aplicaciones
de Service Fabric. API Management se integra directamente con Service Fabric, lo que le permite publicar API con
un amplio conjunto de reglas de enrutamiento para los servicios back-end de Service Fabric.
Disponibilidad
IMPORTANT
Esta característica ya está disponible en los niveles Premium y Developer de API Management debido a la compatibilidad
requerida con redes virtuales.
Arquitectura
Una arquitectura de Service Fabric común usa una aplicación web de una página que realiza llamadas HTTP a
servicios back-end que exponen API HTTP. La aplicación de ejemplo de inicio de Service Fabric presenta una
muestra de esta arquitectura.
En este escenario, un servicio web sin estado actúa como puerta de enlace en la aplicación de Service Fabric. Este
enfoque precisa que escriba un servicio web que admita solicitudes HTTP proxy para servicios back-end, como se
muestra en el siguiente diagrama:
A medida que aumenta la complejidad de las aplicaciones, también lo hacen las puertas de enlace que deben
presentar una API delante de innumerables servicios back-end. Azure API Management se ha diseñado para
controlar API complejas con reglas de enrutamiento, control de acceso, limitación de velocidad, supervisión,
registro de eventos y almacenamiento en caché de respuestas con el mínimo esfuerzo por su parte. Azure API
Management admite la selección de réplicas, la resolución de la partición y la detección de servicios de Service
Fabric para enrutar de forma inteligente las solicitudes directamente a los servicios back-end en Service Fabric
para que no tenga que escribir su propia puerta de enlace de API sin estado.
En este escenario, la interfaz de usuario web se sigue ofreciendo a través de un servicio web, mientras que las
llamadas a la API HTTP se administran y se enrutan a través de Azure API Management, tal como se muestra en
el siguiente diagrama:
Escenarios de aplicación
Los servicios de Service Fabric pueden ser con o sin estado, y pueden tener particiones con uno de los tres
esquemas: singleton, intervalo de Int-64 y con nombre. La resolución del punto de conexión de servicio requiere
identificar una partición específica de una instancia de servicio específica. Al resolver un punto de conexión de un
servicio, deben especificarse el nombre de instancia de servicio (por ejemplo, fabric:/myapp/myservice ) y la
partición específica del servicio, salvo en el caso de la partición singleton.
Azure API Management puede usarse con cualquier combinación de servicios con o sin estado y cualquier
esquema de partición.
Cada servicio tiene un nombre único, pero los nombres no se conocen por adelantado porque los servicios
se crean en respuesta a la entrada del administrador o usuario y, por lo tanto, no se pueden codificar de
forma rígida en las directivas APIM o las reglas de enrutamiento. En su lugar, se genera el nombre del
servicio que se va a enviar una solicitud en la definición de la directiva de back-end del valor name
proporcionado en la ruta de acceso de solicitud de la dirección URL. Por ejemplo:
Se enruta una solicitud para /api/users/foo a la instancia de servicio fabric:/app/users/foo
Se enruta una solicitud para /api/users/bar a la instancia de servicio fabric:/app/users/bar
Cada servicio tiene un nombre único, pero los nombres no se conocen por adelantado porque los servicios
se crean en respuesta a la entrada del administrador o usuario y, por lo tanto, no se pueden codificar de
forma rígida en las directivas APIM o las reglas de enrutamiento. En su lugar, se genera el nombre del
servicio que se va a enviar una solicitud en la definición de la directiva de back-end del valor name
proporcionado en la ruta de acceso de solicitud de la dirección URL. Por ejemplo:
Se enruta una solicitud para /api/users/foo a la instancia de servicio fabric:/app/users/foo
Se enruta una solicitud para /api/users/bar a la instancia de servicio fabric:/app/users/bar
Se realiza también la partición de cada instancia de servicio mediante el esquema de partición Int-64 con dos
particiones y un intervalo de claves que abarca de Int64.MinValue a Int64.MaxValue . La directiva de back-end
calcula una clave de partición dentro de ese intervalo convirtiendo el valor id proporcionado en la ruta de acceso
de solicitud de la dirección URL en un entero de 64 bits, aunque se puede utilizar aquí cualquier algoritmo para
calcular la clave de partición.
Pasos siguientes
Siga el tutorial para configurar el primer clúster de Service Fabric con API Management y enviar solicitudes
mediante API Management a sus servicios.
Integrar API Management con Service Fabric en
Azure
29/07/2019 • 22 minutes to read • Edit Online
La implementación de Azure API Management con Service Fabric es un escenario avanzado. API Management
es útil cuando es necesario publicar API con un completo conjunto de reglas de enrutamiento para los servicios
de Service Fabric de back-end. Las aplicaciones en la nube normalmente necesitan una puerta de enlace front-
end para proporcionar un único punto de entrada para usuarios, dispositivos u otras aplicaciones. En Service
Fabric, una puerta de enlace puede ser cualquier servicio sin estado diseñado para la entrada de tráfico, como
una aplicación ASP.NET Core, Event Hubs, IoT Hub o Azure API Management.
En este artículo se muestra cómo configurar Azure API Management con Service Fabric para enrutar el tráfico a
un servicio de back-end de Service Fabric. Cuando haya terminado, habrá implementado API Management en
una red virtual y configurado una operación de API para enviar tráfico a servicios sin estado de back-end. Para
más información sobre escenarios de Azure API Management con Service Fabric, consulte el artículo de
introducción.
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca
del nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module
(Presentación del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az,
consulte Instalación de Azure PowerShell.
Disponibilidad
IMPORTANT
Esta característica ya está disponible en los niveles Premium y Developer de API Management debido a la
compatibilidad requerida con redes virtuales.
Requisitos previos
Antes de empezar:
Si no tiene ninguna suscripción a Azure, cree una cuenta gratuita
Instale Azure Powershell o la CLI de Azure.
Cree un clúster de Windows en un grupo de seguridad de red.
Si implementa un clúster de Windows, configure un entorno de desarrollo de Windows. Instale
Visual Studio 2019 y las cargas de trabajo de desarrollo Azure, desarrollo web y ASP.NET y desarrollo a
través de plataformas .NET Core. Después, configure un entorno de desarrollo .NET.
Topología de red
Ahora que tiene un clúster de Windows seguro en Azure, implemente API Management en la red virtual
(VNET), en la subred y en el grupo de seguridad de red diseñados para API Management. En este artículo la
plantilla de Resource Manager para API Management está preconfigurada para usar los nombres de la red
virtual, la subred y el grupo de seguridad de red que configuró en el tutorial del clúster de Windows. Asimismo,
este artículo implementa la siguiente topología en Azure, donde API Management y Service Fabric están en
subredes de la misma red virtual:
Connect-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId <guid>
az login
az account set --subscription <guid>
<Resources>
<Endpoints>
<Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" />
</Endpoints>
</Resources>
Al quitar el puerto permite que Service Fabric especificar un puerto dinámicamente desde el intervalo de
puertos de aplicación, puede abrir a través del grupo de seguridad de red en la plantilla de Cluster
Resource Manager, permitiendo el tráfico fluya a él desde API Management.
6. Presione F5 en Visual Studio para comprobar que la API web está disponible de manera local.
Abra Service Fabric Explorer y vaya a una instancia específica del servicio ASP.NET Core para ver la
dirección base donde escucha el servicio. Agregue /api/values a la dirección base y ábralo en un
explorador. Esto invoca el método Get en ValuesController en la plantilla de Web API. Devuelve la
respuesta predeterminada de la plantilla, una matriz JSON con dos cadenas:
["value1", "value2"]`
Este es el punto de conexión que debe exponer a través de API Management en Azure.
7. Por último, implemente la aplicación en el clúster en Azure. In Visual Studio, haga clic con el botón
derecho en el proyecto de la aplicación y seleccione Publicar. Proporcione el punto de conexión del
clúster (por ejemplo, mycluster.southcentralus.cloudapp.azure.com:19000 ) para implementar la aplicación
en el clúster de Service Fabric en Azure.
En el clúster de Service Fabric en Azure ahora se ejecutará un servicio sin estado ASP.NET Core denominado
fabric:/ApiApplication/WebApiService .
Para obtener un conjunto completo de los atributos de directiva de back-end de Service Fabric, consulte la
documentación de back-end de API Management
. VALOR
apimInstanceName sf-apim
apimPublisherEmail [email protected]
apimSku Developer
serviceFabricCertificateName sfclustertutorialgroup320171031144217
certificatePassword q6D7nN%6ck@6
serviceFabricCertificateThumbprint C4C1E541AD512B8065280292A8BA6079C3F26F10
url_path /api/values
clusterHttpManagementEndpoint https://mysfcluster.southcentralus.cloudapp.azure.com:19080
$bytes = [System.IO.File]::ReadAllBytes("C:\mycertificates\sfclustertutorialgroup220171109113527.pfx");
$b64 = [System.Convert]::ToBase64String($bytes);
[System.Io.File]::WriteAllText("C:\mycertificates\sfclustertutorialgroup220171109113527.txt", $b64);
<policies>
<inbound>
<base/>
<set-backend-service
backend-id="servicefabric"
sf-service-instance-name="service-name"
sf-resolve-condition="@(context.LastError?.Reason == "BackendConnectionFailure")" />
</inbound>
<backend>
<base/>
</backend>
<outbound>
<base/>
</outbound>
</policies>
Use el siguiente script para implementar la plantilla de Resource Manager y los archivos de parámetros para
API Management:
$groupname = "sfclustertutorialgroup"
$clusterloc="southcentralus"
$templatepath="C:\clustertemplates"
ResourceGroupName="sfclustertutorialgroup"
az group deployment create --name ApiMgmtNetworkDeployment --resource-group $ResourceGroupName --template-
file network-apim.json --parameters @network-apim.parameters.json
Pruébelo
Ahora puede intentar enviar una solicitud al servicio back-end de Service Fabric a través de API Management
directamente desde Azure Portal.
1. En el servicio API Management, seleccione API.
2. En la API de Service Fabric App que creó en los pasos anteriores, seleccione la pestaña Prueba y, a
continuación, la operación Values.
3. Haga clic en el botón Enviar para enviar una solicitud de prueba al servicio de back-end. La respuesta
HTTP debe ser similar a la siguiente:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Vary: Origin
Ocp-Apim-Trace-Location:
https://apimgmtstodhwklpry2xgkdj.blob.core.windows.net/apiinspectorcontainer/PWSQOq_FCDjGcaI1rdMn8w2-
2?sv=2015-07-08&sr=b&sig=MhQhzk%2FEKzE5odlLXRjyVsgzltWGF8OkNzAKaf0B1P0%3D&se=2018-01-
28T01%3A04%3A44Z&sp=r&traceId=9f8f1892121e445ea1ae4d2bc8449ce4
["value1", "value2"]
Limpieza de recursos
Un clúster está formado por muchos otros recursos de Azure, además del propio recurso del clúster. La manera
más sencilla de eliminar el clúster y todos los recursos que consume es eliminar el grupo de recursos.
Inicie sesión en Azure y seleccione el identificador de suscripción con el que quiere quitar el clúster. Para
encontrar el identificador de suscripción, inicie sesión en Azure Portal. Eliminar el grupo de recursos y todos los
recursos de clúster mediante el cmdlet Remove-AzResourceGroup.
$ResourceGroupName = "sfclustertutorialgroup"
Remove-AzResourceGroup -Name $ResourceGroupName -Force
ResourceGroupName="sfclustertutorialgroup"
az group delete --name $ResourceGroupName
Pasos siguientes
Obtenga más información acerca de cómo usar API Management.
vice-fabric-scripts-and-templates/blob/master/templates/service-integration/network-apim.parameters.jsonn
P+F de Azure API Management
25/05/2018 • 18 minutes to read • Edit Online
Obtenga respuestas a preguntas comunes, patrones y procedimientos recomendados para Azure API
Management.
NOTE
Este artículo se ha actualizado para usar el nuevo módulo Az de Azure PowerShell. Aún puede usar el módulo de AzureRM
que continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Para más información acerca del
nuevo módulo Az y la compatibilidad con AzureRM, consulte Introducing the new Azure PowerShell Az module
(Presentación del nuevo módulo Az de Azure PowerShell). Para obtener instrucciones sobre la instalación del módulo Az,
consulte Instalación de Azure PowerShell.