Pregunta

Me gustaría usar KeyValueMaps para almacenar algunos valores simples, pero las claves que necesito usar se calcularían en tiempo de ejecución.Por ejemplo, en mis 'Entradas Iniciales' quiero hacer algo como esto:

<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Sandbox-Read-Count">
    <DisplayName>Sandbox - Read Count</DisplayName>
    <FaultRules/>
    <Properties/>
    <ExclusiveCache>false</ExclusiveCache>
    <ExpiryTimeInSecs>-1</ExpiryTimeInSecs>
    <InitialEntries>
        <Entry>
            <Key>
                <Parameter>{variable}.sandbox.calls</Parameter>
            </Key>
            <Value>0</Value>
        </Entry>
    </InitialEntries>
    <Scope>apiproxy</Scope>
</KeyValueMapOperations>

Sin embargo, al hacer esto me sale un error al intentar guardar la política:

Error while Uploading file for API Test.
messaging.config.beans.InvalidBundle. Errors:[Entity : policy-Sandbox-Read-Count, Invalid Key Names For Entries: [{apikey}.sandbox.calls];]

¿Es posible utilizar valores calculados en la política KeyValueMap?¿Existe una sintaxis diferente que debería usar?

¿Fue útil?

Solución

He investigado esto.Lo que sucede es cuando guardas el proxy con InitialEntries en el KVM con ámbito de apiproxy, el KVM se crea inmediatamente con las entradas iniciales.Por lo tanto, no hay forma de utilizar variables de tiempo de ejecución, porque el cebado del KVM se produjo antes de que se ejecutara el proxy.

No usaste el mapIdentifier campo en su elemento KeyValueMapOperations (mire el Ejemplo de PUT de KeyValueMap en los documentos de Apigee), por lo que el KVM que crearía se llamaría kvmap.

Puedes usar lo siguiente llamada API de gestión para obtener una lista de los KVM y su contenido para un apiproxy determinado:

GET https://api.enterprise.apigee.com/v1/o/{org}/apis/{apiname}/keyvaluemaps?expand=true

Authorization: Basic {base64 username:password}

Desde el InitialEntries La sección solo se usa cuando el proxy se carga exitosamente por primera vez (incluso si cambia la sección InitialEntries y la vuelve a implementar, no se realizarán cambios si el KVM con ese nombre ya existe), creo que la utilidad de la InitialEntries La sección es bastante limitada.Recomiendo preparar manualmente sus KVM usando el API de administración para inicializar el KVM:

PUT https://api.enterprise.apigee.com/v1/o/{org}/apis/{apiname}/keyvaluemaps

Authorization: Basic {base64 username:password}
Content-Type: application/json

{
  "entry" : [ {
    "name" : "key",
    "value" : "0"
  } ],
  "name" : "{kvmName}"
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top