Допустим, у меня есть конечная точка, подобная следующей:
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, который не может принимать тело.