Publica APIs con la API de Edge

Estás viendo la documentación de Apigee Edge.
Ir a la documentación de Apigee X.
info

En esta sección, se describe cómo usar la API de Edge para crear productos de API para su publicación en portales para desarrolladores.

Crea productos de API con la API

Los productos de API permiten que los desarrolladores registren apps que consumen APIs con claves de API y tokens de acceso de OAuth. Los productos de API están diseñados para permitirte "agrupar" recursos de API y, luego, publicar esos paquetes en diferentes grupos de desarrolladores. Por ejemplo, es posible que debas publicar un conjunto de recursos de API para tus desarrolladores socios, mientras que publicas otro paquete para desarrolladores externos. Los productos de API te permiten realizar esta agrupación de inmediato, sin requerir ningún cambio en tus APIs. Un beneficio adicional es que el acceso de los desarrolladores se puede "actualizar" y "disminuir" sin que los desarrolladores deban obtener claves de consumidor nuevas para sus apps.

Para crear un producto de API con la API, envía una solicitud POST a /organizations/{org_name}/apiproducts. Para obtener más información, consulta la referencia de la API de Create API Product.

La siguiente solicitud crea un producto de API llamado weather_free. El producto de API proporciona acceso a todas las APIs expuestas por el proxy de API llamado weatherapi que se implementa en el entorno test. El tipo de aprobación se establece en auto, lo que indica que se aprobará cualquier solicitud de acceso.

curl -X POST https://api.enterprise.apigee.com/v1/organization/myorg/apiproducts \
-H "Content-Type:application/json" \
-d \
'{
  "approvalType": "auto",
  "displayName": "Free API Product",
  "name": "weather_free",
  "proxies": [ "weatherapi" ],
  "environments": [ "test" ]
}' \
-u email:password 

Respuesta de muestra:

{
  "apiResources" : [ ],
  "approvalType" : "auto",
  "attributes" : [ ],
  "createdAt" : 1362759663145,
  "createdBy" : "developer@apigee.com",
  "displayName" : "Free API Product",
  "environments" : [ "test" ],
  "lastModifiedAt" : 1362759663145,
  "lastModifiedBy" : "developer@apigee.com",
  "name" : "weather_free",
  "proxies" : [ "weatherapi" ],
  "scopes" : [ ]
}

El producto de API creado anteriormente implementa la situación más básica, que autoriza solicitudes a un proxy de API en un entorno. Define un producto de API que permite que una app autorizada acceda a cualquier recurso de API al que se acceda a través del proxy de API que se ejecuta en el entorno de prueba. Los productos de API exponen parámetros de configuración adicionales que te permiten personalizar el control de acceso a tus APIs para diferentes grupos de desarrolladores. Por ejemplo, puedes crear dos productos de API que proporcionen acceso a diferentes proxies de API. También puedes crear dos productos de API que proporcionen acceso a los mismos proxies de API, pero con diferentes parámetros de configuración de cuotas asociados.

Opciones de configuración de los productos de API

Los productos de API exponen las siguientes opciones de configuración:

Name Descripción Predeterminado ¿Es obligatorio?
apiResources

Una lista separada por comas de URI, o rutas de recursos, “agrupadas”en el producto de API.

De forma predeterminada, las rutas de recursos se asignan desde la proxy.pathsuffix variable. El sufijo de la ruta de acceso del proxy se define como el fragmento de URI que sigue a la ProxyEndpoint ruta base. Por ejemplo, en el producto de API de muestra que se muestra a continuación, el apiResources elemento se define como /forecastrss. Dado que la ruta base definida para este proxy de API es /weather, eso significa que este producto de API solo permite solicitudes a /weather/forecastrss.

Puedes seleccionar una ruta de acceso específica o seleccionar todas las rutas secundarias con un comodín. Se admiten comodines (/** y /*). El comodín de asterisco doble indica que se incluyen todos los sub-URIs. Un solo asterisco indica que solo se incluyen los URIs de un nivel inferior.

De forma predeterminada, '/' admite los mismos recursos que '/**', así como la ruta base definida por el proxy de API. Por ejemplo, si la ruta base del proxy de API es /v1/weatherapikey, el producto de API admite solicitudes a /v1/weatherapikey y a cualquier sub-URI, como /v1/weatherapikey/forecastrss, /v1/weatherapikey/region/CA, etcétera. Consulta Administra productos de API para obtener información sobre cómo cambiar el comportamiento de este valor predeterminado.

N/A No
approvalType Especifica cómo se aprueban las claves de API para acceder a las APIs definidas por el producto de API. Si se establece en manual, la clave que se genera para la app está en el estado "pendiente". Esas claves no funcionarán hasta que se hayan aprobado de forma explícita. Si se establece en auto, todas las claves se generan en el estado "aprobado" y funcionan de inmediato. (auto se suele usar para proporcionar acceso a productos de API gratuitos o de prueba que proporcionan cuotas o capacidades limitadas). N/A
attributes

Es un array de atributos que se pueden usar para extender el perfil predeterminado del producto de API con metadatos específicos del cliente.

Usa esta propiedad para especificar el nivel de acceso del producto de API como public, private o internal. Por ejemplo:
"attributes": [
{
"name": "access",
"value": "public"
},
{
"name": "foo",
"value": "foo"
},
{
"name": "bar",
"value": "bar"
}
]
N/A No
scopes Una lista separada por comas de los permisos de OAuth que se validan en el entorno de ejecución. (Apigee Edge valida que los permisos en cualquier token de acceso presentado coincidan con el permiso establecido en el producto de API ). N/A No
proxies Proxies de API con nombre a los que está vinculado este producto de API. Si especificas proxies, puedes asociar recursos en el producto de API con proxies de API específicos, lo que impide que los desarrolladores accedan a esos recursos a través de otros proxies de API. N/A No. Si no se define, apiResources debe definirse de forma explícita (consulta la información sobre apiResources anterior) y la variable flow.resource.name configurada en la política AssignMessage.
environments Entornos con nombre (por ejemplo, "test" o "prod") a los que está vinculado este producto de API. Si especificas uno o más entornos, puedes vincular los recursos que se muestran en el producto de API a un entorno específico, lo que impide que el desarrollador acceda a esos recursos a través de proxies de API en otro entorno. Este parámetro de configuración se usa, por ejemplo, para evitar que los proxies de API implementados en "test" accedan a los recursos asociados con los proxies de API en "prod". N/A No. Si no está definido, se debe definir apiResources de forma explícita, y la variable flow.resource.name está establecida en la política AssignMessage.
quota Cantidad de solicitudes permitidas por app durante el intervalo de tiempo especificado N/A No
quotaInterval Cantidad de unidades de tiempo en las que se evalúan las cuotas N/A No
quotaTimeUnit La unidad de tiempo (minuto, hora, día o mes) sobre la que se cuentan las cuotas N/A No

A continuación, se proporciona un ejemplo más detallado para crear un producto de API.

curl -X POST  https://api.enterprise.apigee.com/v1/o/{org_name}/apiproducts \
-H "Content-Type:application/json" -d \
'{
  "apiResources": [ "/forecastrss" ],
  "approvalType": "auto", 
  "attributes":
    [ {"name": "access", "value": "public"} ],
  "description": "Free API Product",
  "displayName": "Free API Product",
  "name": "weather_free",
  "scopes": [],
  "proxies": [ "weatherapi" ],
  "environments": [ "test" ],
  "quota": "10",
  "quotaInterval": "2",
  "quotaTimeUnit": "hour" }' \
-u email:password

Respuesta de muestra:

{
  "apiResources" : [ "/forecastrss" ],
  "approvalType" : "auto",
  "attributes" : [ {
    "name" : "access",
    "value" : "public"
  },
  "createdAt" : 1344454200828,
  "createdBy" : "admin@apigee.com",
  "description" : "Free API Product",
  "displayName" : "Free API Product",
  "lastModifiedAt" : 1344454200828,
  "lastModifiedBy" : "admin@apigee.com",
  "name" : "weather_free",
  "scopes" : [ ],
  "proxies": [ {'weatherapi'} ],
  "environments": [ {'test'} ],
  "quota": "10",
  "quotaInterval": "1",
  "quotaTimeUnit": "hour"}'
}

Acerca de los permisos

Un permiso es un concepto extraído de OAuth y se asigna aproximadamente al concepto de un "permiso". En Apigee Edge, los permisos son completamente opcionales. Puedes usar permisos para lograr una autorización más detallada. Cada clave de consumidor emitida a una app está asociada con un "permiso maestro". El permiso maestro es el conjunto de todos los permisos en todos los productos de API para los que se aprobó esta app. Para las apps aprobadas para consumir varios productos de API, el permiso maestro es la unión de todos los permisos definidos en los productos de API para los que se aprobó la clave de consumidor.

Visualiza productos de API

Para ver los productos de API creados para una organización con la API, consulta las siguientes secciones:

A continuación, se proporciona un ejemplo de cómo ver productos de API con la API:

curl -X GET "https://ext.apiexchange.org/v1/mint/organizations/{org_name}/products?monetized=true" \
  -H "Accept:application/json" \
  -u email:password

La respuesta debería verse de la siguiente manera (solo se muestra una parte de la respuesta):

{
  "product" : [ {
    "customAtt1Name" : "user",
    "customAtt2Name" : "response size",
    "customAtt3Name" : "content-length",
    "description" : "payment api product",
    "displayName" : "payment",
    "id" : "payment",
    "name" : "payment",
    "organization" : {
      ...
    },
    "pricePoints" : [ ],
    "status" : "CREATED",
    "transactionSuccessCriteria" : "status == 'SUCCESS'"
  }, {
    "customAtt1Name" : "user",
    "customAtt2Name" : "response size",
    "customAtt3Name" : "content-length",
    "description" : "messaging api product",
    "displayName" : "messaging",
    "id" : "messaging",
    "name" : "messaging",
    "organization" : ...
    },
    "pricePoints" : [ ],
    "status" : "CREATED",
    "transactionSuccessCriteria" : "status == 'SUCCESS'"
  } ],
  "totalRecords" : 2
}

Registra desarrolladores con la API

Todas las apps pertenecen a desarrolladores o empresas. Por lo tanto, para crear una app, primero debes registrar un desarrollador o una empresa.

Los desarrolladores se registran en una organización mediante la creación de un perfil. Ten en cuenta que el correo electrónico del desarrollador que se incluye en el perfil se usa como la clave única para el desarrollador en Apigee Edge.

Para admitir la monetización, debes definir los atributos de monetización cuando crees o edites desarrolladores. También puedes definir otros atributos arbitrarios para usarlos en estadísticas personalizadas, aplicación de políticas personalizadas, etcétera. Apigee Edge no interpretará estos atributos arbitrarios .

Por ejemplo, la siguiente solicitud registra un perfil para un desarrollador cuya dirección de correo electrónico es ntesla@theremin.com y define un subconjunto de atributos de monetización mediante la API de Create developer:

$ curl -H "Content-type:application/json" -X POST -d \
'{"email" : "ntesla@theremin.com", 
  "firstName" : "Nikola", 
  "lastName" : "Tesla", 
  "userName" : "theremin", 
  "attributes" : [ 
  { 
    "name" : "project_type", 
    "value" : "public"
  },
  {    
   "name": "MINT_BILLING_TYPE",
   "value": "POSTPAID"
  },
  {
   "name": "MINT_DEVELOPER_ADDRESS",
   "value": "{\"address1\":\"Dev One Address\",\"city\":\"Pleasanton\",\"country\":\"US\",\"isPrimary\":true,\"state\":\"CA\",\"zip\":\"94588\"}"
  },
  {
   "name": "MINT_DEVELOPER_TYPE",
   "value": "TRUSTED"
  },
  {    
   "name": "MINT_HAS_SELF_BILLING,
   "value": "FALSE"
  },
  {
   "name" : "MINT_SUPPORTED_CURRENCY",
   "value" : "usd"
  }
 ] 
}' \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers \
-u email:password 

Respuesta de muestra:

{
          "email" : "ntesla@theremin.com",
          "firstName" : "Nikola",
          "lastName" : "Tesla",
          "userName" : "theremin",
          "organizationName" : "{org_name}",
          "status" : "active",
          "attributes" : [ 
          {
            "name" : "project_type",
            "value" : "public"
          },
          {    
             "name": "MINT_BILLING_TYPE",
             "value": "POSTPAID"
          },
          {
             "name": "MINT_DEVELOPER_ADDRESS",
             "value": "{\"address1\":\"Dev One Address\",\"city\":\"Pleasanton\",\"country\":\"US\",\"isPrimary\":true,\"state\":\"CA\",\"zip\":\"94588\"}"
          },
          {
             "name": "MINT_DEVELOPER_TYPE",
             "value": "TRUSTED"
          },
          {    
             "name": "MINT_HAS_SELF_BILLING,
             "value": "FALSE"
          },
          {
             "name" : "MINT_SUPPORTED_CURRENCY",
             "value" : "usd"
          } 
          ],
          "createdAt" : 1343189787717,
          "createdBy" : "admin@apigee.com",
          "lastModifiedAt" : 1343189787717,
          "lastModifiedBy" : "admin@apigee.com"
        }

Registra apps para desarrolladores con la API

Cada app registrada en Apigee Edge está asociada con un desarrollador y un producto de API. Cuando se registra una app en nombre de un desarrollador, Apigee Edge genera una "credencial" (un par de clave de consumidor y secreto) que identifica la app. Luego, la app debe pasar estas credenciales como parte de cada solicitud a un producto de API asociado con la app.

La siguiente solicitud usa la API de Create Developer App a fin de registrar una app para el desarrollador que creaste antes: ntesla@theremin.com. Cuando registras una app, debes definir un nombre para la app, una callbackUrl y una lista de uno o más productos de API:
$ curl -H "Content-type:application/json" -X POST -d \
'{
  "apiProducts": [ "weather_free"], 
  "callbackUrl" : "login.weatherapp.com", 
  "keyExpiresIn" : "2630000000",
  "name" : "weatherapp"}' \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/ntesla@theremin.com/apps \
-u email:password 

Algunos tipos de permisos de OAuth (como el código de autorización) usan la callbackUrl para validar las solicitudes de redireccionamiento de la app. Si usas OAuth, este valor se debe establecer como el mismo valor que redirect_uri, que se usa para realizar solicitudes OAuth.

El atributo keyExpiresIn especifica, en milisegundos, durante la vida útil de la clave de consumidor que se generará para la app de desarrollador. El valor predeterminado, -1, indica un período de validez infinito.

Respuesta de muestra:

{
  "appId": "5760d130-528f-4388-8c6f-65a6b3042bd1",
  "attributes": [
    {
      "name": "DisplayName",
      "value": "Test Key Expires"
    },
    {
      "name": "Notes",
      "value": "Just testing this attribute"
    }
  ],
  "createdAt": 1421770824390,
  "createdBy": "wwitman@apigee.com",
  "credentials": [
    {
      "apiProducts": [
        {
          "apiproduct": "ProductNoResources",
          "status": "approved"
        }
      ],
      "attributes": [],
      "consumerKey": "jcAFDcfwImkJ19A5gTsZRzfBItlqohBt",
      "consumerSecret": "AX7lGGIRJs6s8J8y",
      "expiresAt": 1424400824401,
      "issuedAt": 1421770824401,
      "scopes": [],
      "status": "approved"
    }
  ],
  "developerId": "e4Oy8ddTo3p1BFhs",
  "lastModifiedAt": 1421770824390,
  "lastModifiedBy": "wwitman@apigee.com",
  "name": "TestKeyExpires",
  "scopes": [],
  "status": "approved"
}

Administra claves de consumidor para apps con la API

Obtén la clave de consumidor (la clave de API) de la app

Las credenciales de una app (producto de API, clave de consumidor y secreto) se muestran como parte del perfil de la app. Un administrador de una organización puede recuperar la clave de consumidor en cualquier momento.

En el perfil de la app, se muestra el valor de la clave de consumidor y el secreto, el estado de la clave de consumidor y cualquier asociación de producto de la API de la clave. Como administrador, puedes recuperar el perfil de clave del consumidor en cualquier momento mediante Obtén información clave sobre una API de apps de desarrollador:

$ curl -X GET -H "Accept: application/json" \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/ntesla@theremin.com/apps/weatherapp/keys/HQg0nCZ54adKobpqEJaE8FefGkdKFc2J \
-u email:password

Respuesta de muestra:

{
  "apiProducts" : [ {
    "apiproduct" : "weather_free",
    "status" : "approved"
  } ],
  "attributes" : [ ],
  "consumerKey" : "HQg0nCZ54adKobpqEJaE8FefGkdKFc2J",
  "consumerSecret" : "1eluIIdWG3JGDjE0",
  "status" : "approved"
}

Para obtener más información, consulta Obtén información clave sobre una app de desarrollador.

Agrega un producto de API a una app y una clave

Para actualizar una app a fin de agregar un nuevo producto de API, debes agregar el producto de API a la clave de la app mediante Agrega el producto de API a la API de la clave. Consulta Agrega el producto de API a la clave para obtener más información.

Si agregas un producto de API a una clave de app, se habilita la app que contiene la clave para acceder a los recursos de API agrupados en el producto de API. La siguiente llamada de método agrega un nuevo producto de API a una app:

$ curl -H "Content-type:application/json" -X POST -d \
'{
  "apiProducts": [ "newAPIProduct"]
}' \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/ntesla@theremin.com/apps/weatherapp/keys/HQg0nCZ54adKobpqEJaE8FefGkdKFc2J \
-u email:password 

Respuesta de muestra:

{
  "apiProducts": [
   {
     "apiproduct": "weather_free",
     "status": "approved"
   },
   {
     "apiproduct": "newAPIProduct",
     "status": "approved"
   }
 ],
 "attributes": [],
 "consumerKey": "HQg0nCZ54adKobpqEJaE8FefGkdKFc2J",
 "consumerSecret": "1eluIIdWG3JGDjE0",
 "expiresAt": -1,
 "issuedAt": 1411491156464,
 "scopes": [],
 "status": "approved"
 }

Aprueba claves de consumidor

Si estableces el tipo de aprobación en manual, puedes controlar qué desarrolladores pueden acceder a los recursos protegidos por los productos de API. Cuando los productos de API tienen la aprobación de claves establecida en manual, las claves de consumidor deben aprobarse de forma explícita. Las claves se pueden aprobar de forma explícita con la API de Aprueba o revoca claves específicas de apps de desarrollador:

$ curl -X POST -H "Content-type:appilcation/octet-stream" \ 
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/ntesla@theremin.com/apps/weatherapp/keys/HQg0nCZ54adKobpqEJaE8FefGkdKFc2J?"action=approve" \
-u email:password

Respuesta de muestra:

{
  "apiProducts" : [ {
  "apiproduct" : "weather_free",
  "status" : "approved"
} ],
  "attributes" : [ ],
  "consumerKey" : "HQg0nCZ54adKobpqEJaE8FefGkdKFc2J",
  "consumerSecret" : "1eluIIdWG3JGDjE0",
  "status" : "approved"
}

Para obtener más información, consulta Aprueba o revoca claves específicas de apps de desarrollador.

Aprueba productos de API para claves de consumidor

La asociación de un producto de API con una clave de consumidor también tiene un estado. Para que el acceso a la API sea exitoso, se debe aprobar la clave de consumidor, y la clave de consumidor para el producto de API adecuado. La asociación de una clave de consumidor con un producto de API se puede aprobar con la API de Aprueba o revoca el producto de API para una clave de app de desarrollador:

$ curl -X POST -H "Content-type:application/octet-stream" \ 
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/ntesla@theremin.com/apps/weatherapp/keys/HQg0nCZ54adKobpqEJaE8FefGkdKFc2J/apiproducts/weather_free?"action=approve" \
-u email:password

En este comando cURL, no se muestra una respuesta. Consulta Aprueba o revoca el producto de API para una clave de app de desarrollador a fin de obtener más información.

Revoca productos de API para claves de consumidor

Hay muchos motivos por los que es posible que debas revocar la asociación de una clave de consumidor con un producto de API. Es posible que debas quitar un producto de API de una clave de consumidor debido a la falta de pago del desarrollador, un período de prueba vencido o cuando una app se promociona de un producto de API a otro.

Para revocar la asociación de una clave de consumidor con un producto de API, usa la API Aprueba o revoca la clave específica de la app de desarrollador mediante la acción de revocar contra la clave de consumidor de la app de desarrollador.

$ curl -X POST -H "Content-type:application/octet-stream" \ 
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/ntesla@theremin.com/apps/weatherapp/keys/HQg0nCZ54adKobpqEJaE8FefGkdKFc2J/apiproducts/weather_free?"action=revoke" \
-u email:password

En este comando cURL, no se muestra una respuesta. Para obtener más información, consulta Aprueba o revoca claves específicas de apps de desarrollador.

Aplica la configuración del producto de API

Para que se apliquen los productos de API, se debe adjuntar uno de los siguientes tipos de políticas al flujo del proxy de API:

  • VerifyAPIKey: Toma una referencia a una clave de API, verifica que represente una app válida y hace coincidir el producto de API. Consulta la política VerifyAPIKey para obtener más información.
  • Operación OAuthV1, “VerifyAccessToken”: Verifica la firma, valida un token de acceso de OAuth 1.0a y una “clave de consumidor” y hace coincidir la app con el producto de API. Consulta la política OAuth v1.0a para obtener más información.
  • Operación OAuthV2, “VerifyAccessToken”: Verifica que el token de acceso de OAuth 2.0 sea válido, hace coincidir el token con la app, verifica que la app sea válida y, luego, hace coincidir la app con un producto de API. Consulta la página principal de OAuth home para obtener más información.

Una vez que se configuran las políticas y los productos de API, Apigee Edge ejecuta el siguiente proceso:

  1. Apigee Edge recibe una solicitud y la enruta al proxy de API adecuado.
  2. Se ejecuta una política que verifica la clave de API o el token de acceso de OAuth que presenta el cliente.
  3. Edge resuelve la clave de API o el token de acceso en un perfil de app.
  4. Edge resuelve la lista (si existe) de los productos de API asociados con la app.
  5. El primer producto de API que coincide se usa para propagar las variables de cuotas.
  6. Si ningún producto de API coincide con la clave de API o el token de acceso, se rechaza la solicitud.
  7. Edge aplica el control de acceso basado en URI (entorno, proxy de API y ruta de acceso de URI) según la configuración del producto de API, junto con la configuración de cuotas.