prits
prits

Reputation: 19

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?

Upvotes: 1

Views: 1995

Answers (3)

user1842997
user1842997

Reputation: 99

I was also facing this issue and after making below change in KeyValueMapOperations, it started working for me.

<Scope>apiproxy</Scope>
<Parameter>apigee.countryCode</Parameter>

Upvotes: 0

Mike Dunker
Mike Dunker

Reputation: 1990

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.

Upvotes: 2

rpattnaik
rpattnaik

Reputation: 76

Step 1: Verify if teh keyvalumap is correctly created: /v1/o/{org_name}/apis/{api_name}/keyvaluemaps" --> this should list the countrymap KVM

Step 2: Populate the KVM before trying to do a GET call on it.You can populate it either by using API Calls (apigee.com/docs/api/api_methods/62-update-keyvaluemap) , or by Using PUT operation of KeyValueMapOperations as shown here (apigee.com/docs/api-services/content/persist-data-using-keyvaluemap)

Step 3: Check the entries of KVM /v1/o/{org_name}/apis/{api_name}/keyvaluemaps/countrymap

Step 4: You can use the same KeyValueMapOperations Polices as given in example to do a get on the KVM

Upvotes: 1

Related Questions