apigee之在 Apigee 中,如何使用 AccessEntity 政策以及稍后在 Javascript 中为开发人员获取自定义属性值

98°冷暖 阅读:40 2025-04-02 23:11:03 评论:0

有一个自定义属性分配给名为“XYZ”的开发人员。在 API 代理中,如何使用 AccessEntity 策略(以及教程中给出的 AssignMessage 和 ExtractVariable 策略:http://apigee.com/docs/api-services/content/retrieve-entity-profiles-using-accessentity)来检索它的值,以便可以在 Javascript 中进一步访问它?教程文档中给出的示例不是很清楚。

我有以下配置不起作用。 'XYZ' 是开发者自定义属性的名称:

AccessEntity 政策-

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<AccessEntity async="false" continueOnError="false" enabled="true" name="access-developer-attribute"> 
    <DisplayName>AccessEntity Developer Attribute</DisplayName> 
    <FaultRules/> 
    <Properties/> 
    <EntityIdentifier ref="XYZ"></EntityIdentifier> 
    <EntityType value="developer"></EntityType> 
</AccessEntity> 

分配消息政策 -
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<AssignMessage async="false" continueOnError="false" enabled="true" name="convert-accessentity-xml-to-message-request"> 
    <DisplayName>Convert AccessEntity Xml To Message Request</DisplayName> 
    <FaultRules/> 
    <Properties/> 
    <Set> 
        <Headers/> 
        <QueryParams/> 
        <FormParams/> 
        <Verb/> 
        <Path/> 
        <Payload type="text/xml">AccessEntity.access-developer-attribute</Payload> 
    </Set> 
    <AssignVariable> 
        <Name>name</Name> 
        <Value/> 
        <Ref/> 
    </AssignVariable> 
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> 
    <AssignTo createNew="true" transport="http" type="request">accessentity.XYZ-attribute</AssignTo>  
</AssignMessage> 

ExtractVariables 政策 -
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ExtractVariables async="false" continueOnError="false" enabled="true" name="retrieve-developer-attribute"> 
    <DisplayName>Retrieve Developer Domain</DisplayName> 
    <FaultRules/> 
    <Properties/> 
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> 
    <Source>accessentity.XYZ-attribute</Source>  
    <VariablePrefix>developer_attribute</VariablePrefix> 
    <XMLPayload stopPayloadProcessing="false"> 
        <Namespaces/> 
        <Variable name="xyz" type="string"> 
            <XPath>/Developer/Attributes/XYZ</XPath> 
        </Variable> 
    </XMLPayload> 
</ExtractVariables> 

Javascript -
var xyzValue = context.getVariable("developer_attribute.xyz"); 

请您参考如下方法:

AccessEntity 中的 EntityIdentifier ref 是指标识要引用的开发人员的变量。您可以传入多种类型的数据来识别开发人员(developeremail、developerid、appid、consumerkey)。最好包括在 EntityIdentifier 元素中使用的数据类型。在下面的示例中,消费者 key 存储在变量 client_id 中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<AccessEntity async="false" continueOnError="false" enabled="true" name="access-developer-attribute"> 
    <DisplayName>AccessEntity Developer Attribute</DisplayName> 
    <EntityIdentifier ref="client_id" type="consumerkey"></EntityIdentifier> 
    <EntityType value="developer"></EntityType> 
</AccessEntity> 

此外,您的 AssignMessage 策略未从 AccessEntity.access-developer-attribute 变量中正确检索。您需要在变量名称周围使用花括号,否则有效负载将是文本“AccessEntity.access-developer-attribute”。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<AssignMessage async="false" continueOnError="false" enabled="true" name="convert-accessentity-xml-to-message-request"> 
    <DisplayName>Convert AccessEntity Xml To Message Request</DisplayName> 
    <Set> 
        <Payload type="text/xml">{AccessEntity.access-developer-attribute}</Payload> 
    </Set> 
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> 
    <AssignTo createNew="true" transport="http" type="request">accessentity.XYZ-attribute</AssignTo>  
</AssignMessage> 

您还会注意到我删除了策略中未使用的字段。这使得策略更具可读性。

您的 ExtractVariables 和 JavaScript 应该可以正常工作。


标签:JavaScript
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号