在此用例中,在API代理中,必须访问组织中每个开发人员的自定义属性。
我知道调用'https://api.enterprise.apigee.com/v1/o/org_name/developers'会给出所有开发者的电子邮件(用户名)列表,然后我可以使用'https://api.enterprise.apigee.com/v1/o/org_name/developers/dev1_email@abc.com'来获取特定的开发者帐户。
我尝试使用服务标注政策获取所有开发人员的列表,并返回开发人员电子邮件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout async="false" continueOnError="false" enabled="true" name="get-developer-list">
<DisplayName>Get Developer List</DisplayName>
<Request learPayload="true" variable="DeveloperListRequest"/>
<Response>DeveloperList</Response>
<HTTPTargetConnection>
<URL>https://api.enterprise.apigee.com/v1/o/myOrg/developers</URL>
</HTTPTargetConnection>
</ServiceCallout>
但是,这需要用户名和密码,可以通过“分配消息”策略进行设置。怎么能实现这一目标?这是正确的方法还是有其他方法吗?
答案 0 :(得分:2)
在大多数情况下,您应该避免呼叫管理服务器。管理服务器端点不是为您可以在API中处理的相同数量的流量构建的,如果重载它,可能会导致它停止响应。
要访问开发人员的信息,您可以使用AccessEntity政策:
<AccessEntity name="GetDeveloperInfo">
<EntityType value="developer"/>
<EntityIdentifier ref="variableHoldingIdentifier" type="developeremail"/>
</AccessEntity>
您可以在EntityIdentifier ref属性中指定包含要访问的开发人员ID的变量。 EntityIdentifier类型属性包含用于访问实体的数据类型。对于开发人员,您可以通过电子邮件,开发人员ID,appID或consumerKey进行访问。有关详细信息,请参阅the AccessEntity docs。
如果您需要从所有开发人员的列表开始,您不能通过标准策略执行此操作,并且您必须调用管理API以获取列表,但您仍应使用AccessEntity策略检索开发人员的数据。
如果您担心安全问题,我建议您专门创建一个用户使用复杂密码进行标注。创建仅允许GET访问的自定义角色以读取开发人员列表,并仅为该用户分配该角色。将密码直接放入API意味着如果您在某处下载/归档源代码,则可能会损害用户名/密码。您可以将密码的加密版本存储在键/值映射中,并从那里检索并在API中解密,这样某人就必须同时获取您的包和访问您的键/值映射数据以获取任何密码/值映射数据访问。在任何情况下,如果您已正确锁定该用户的访问权限,那么获得用户凭据访问权限的人只能获取开发人员列表,而不会获得任何其他内容。
为了避免过于频繁地调用(以及淹没管理API端点),您可以将管理API的响应缓存一段时间(一分钟或更长时间)。这样可以避免流量大的问题进入管理API。