Search code examples
apigee

How do you use a KeyValueMap created through platform API inside a KeyValueMapOperations policy


I created a key/value map using the platform API defined in this doc. I used the API-scoped url to create a key/value map named countrymap.

https://api.enterprise.apigee.com/v1/o/{org_name}/apis/{api_name}/keyvaluemaps

and plugged in the sample weather api I made while following the tutorials.

However I could not seem to refer to this map when I added a KeyValueMapOperations policy inside the API proxy. I tried adding a mapIdentifier="countrymap" to the definition (based on the samples) but it still does not see it.

<KeyValueMapOperations async="false" continueOnError="false" enabled="true" mapIdentifier="countrymap" name="keyvaluemapoperations-2">
    <DisplayName>KeyValueMapOperations-2</DisplayName>
    <FaultRules/>
    <Properties/>
    <ExclusiveCache>false</ExclusiveCache>
    <ExpiryTimeInSecs>-1</ExpiryTimeInSecs>
    <Get assignTo="my.country" index="1">
        <Key>
            <Parameter ref="apigee.countryCode"></Parameter>
        </Key>
    </Get>
    <Scope>organization</Scope>
</KeyValueMapOperations>

The policy works if I add an <InitialEntries> definition to the code above.

According to the Key/Value Maps docs:

Key/ValueMaps provide an API for storing arbitrary name/value pairs that can be access at runtime by custom policies, or for other custom runtime requirements such as protocol support.

Do custom policies include the KeyValueMapOperations policy? What am I missing here?


Solution

  • As you mentioned, you put the KeyValueMap in the scope of the api. To access that KVM, you'll need to use:

    <Scope>apiproxy</Scope>
    

    See the details for configuring the policy here.