Как правильно обрабатывать фильтрацию с помощью облачных конечных точек? - PullRequest
0 голосов
/ 13 января 2020

Допустим, у меня есть конечная точка, подобная следующей:

class AccountMessage(messages.Message):
    id = messages.IntegerField(1)

ACCOUNT_RESOURCE_CONTAINER = ResourceContainer(
    AccountMessage,
    team_id=messages.StringField(1, required=True)
)

class AccountResourceContainer = endpoints.ResourceContainer
    @endpoints.method(
        ACCOUNT_RESOURCE_CONTAINER,
        Accounts,
        path='team/{team_id}/accounts',
        http_method='GET',
        name='list_accounts')
    def list_team_accounts(self, request):
        """
        List all of a team's accounts.
        """
        return Team.get_accounts_by_id(team_id)

... и я хочу отфильтровать эти учетные записи для is_active с помощью запроса GET, то есть /team/123/accounts?is_active=true.

Какова лучшая практика для достижения этой цели?

Вот что я пробовал и не работает:

class ActiveAccountMessage(messages.Message):
    id = messages.IntegerField(1)
    is_active = messages.BooleanField(2, default=True)

ACTIVE_ACCOUNT_RESOURCE_CONTAINER = ResourceContainer(
    ActiveAccountMessage,
    team_id=messages.StringField(1, required=True)
)

@endpoints.method(
    ACTIVE_ACCOUNT_RESOURCE_CONTAINER,
    Accounts,
    path='team/{team_id}/accounts',
    http_method='GET',
    name='list_accounts')
def list_team_accounts(self, request):
    """
    List all of a team's accounts.
    Filter on `is_active`.
    """
    return Team.get_accounts_by_id_and_active(team_id, is_active=request.is_active)

Однако при компиляции GCP возникает следующая ошибка:

endpoints.api_exceptions.ApiConfigurationError: Метод my_method_name указывает сообщение тела в своем ResourceContainer, но это тип метода HTTP, который не может принимать тело.

...