APIGEE: как сделать шаг за шагом Динамическая квота на основе классов

Я хотел бы включить квоту API для каждого пользователя в APIGEE. Я пытался сделать несколько шагов по этому поводу, но на сайте APIGEE я получил очень мало информации в виде динамической квоты на основе классов. Не могли бы вы предоставить пошаговую процедуру включения политики квоты на пользователя, как в динамической квоте на основе классов?

Спасибо,


person bala99    schedule 02.06.2014    source источник


Ответы (1)


Все, что вам нужно сделать, это указать пользовательскую переменную в вашей политике квот. Если вы используете OAuth, вы можете установить атрибут в политике создания токена следующим образом.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-Gen-Token">
    <DisplayName>OAuth Gen Token</DisplayName>
    <FaultRules/>
    <Properties/>
    <Attributes> 
    <Attribute name="userid" ref="request.formparam.login" display="false"/>
  </Attributes>
  <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>86400000</ExpiresIn>
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GrantType>request.formparam.grant_type</GrantType>
       <UserName>request.formparam.login</UserName>
     <PassWord>request.formparam.login</PassWord>
     <Scope>request.formparam.scope</Scope>
  <GenerateResponse/>
</OAuthV2>

Где ‹Атрибут name="userid" ref="request.formparam.login" display="false" /› становится уникальной переменной для этого пользователя. Он будет заполнен, когда вы проверите токен доступа как переменную с именем accesstoken.userid.

Затем определите свою квоту, используя эту переменную следующим образом:

<Quota async="false" continueOnError="false" enabled="true" name="Quota">
    <DisplayName>Quota</DisplayName>
    <FaultRules/>
    <Properties/>
    <Identifier ref="accesstoken.userid"/> 
    <Allow count="2000" countRef="apiproduct.developer.quota.limit"/>
    <Interval ref="apiproduct.developer.quota.interval">30</Interval>
    <Distributed>true</Distributed>
    <Synchronous>false</Synchronous>
    <TimeUnit ref="apiproduct.developer.quota.timeunit">minute</TimeUnit>
    <AsynchronousConfiguration>
        <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
        <SyncMessageCount>5</SyncMessageCount>
    </AsynchronousConfiguration>
</Quota>

Затем ваша квота будет увеличиваться на ‹Идентификатор ref="accesstoken.userid" /›, который должен быть уникальным для каждого пользователя.

person Michael Bissell    schedule 03.06.2014
comment
У меня есть сомнения, можно ли применить это с помощью API-ключей вместо OAuth? Если да, не могли бы вы упомянуть решение, как установить динамическую квоту на основе классов с ключами API. Спасибо, - person bala99; 04.06.2014
comment
У меня есть вопрос. Если вы используете ключи уровня приложения, как вы можете идентифицировать людей? Айпи адрес? Что-то в заголовках или полезных нагрузках? - person Michael Bissell; 04.06.2014
comment
Спасибо за Ваш ответ. Да, как вы говорите, мы не можем пройти аутентификацию идентификатора пользователя в ключах уровня приложения. Я просто громко думаю, могу ли я отправить идентификатор в качестве одного из ключей при вызове URL-адреса API, добавив параметры запроса - person bala99; 05.06.2014
comment
Затем вы можете установить эту переменную в качестве идентификатора квоты, например -Identifier ref=request.queryparam.yourparam-, или, если вы предоставляете client_credentials, установите ее как атрибут токена доступа и используйте этот атрибут в качестве своего идентификатора. - person Michael Bissell; 06.06.2014