5

私はグーグルがaMaleResponseMessageまたはのいずれかを返すことができる必要があるメソッドを指定することができFemaleResponseMessageます。それを指定する方法はありますか?

@endpoints.method(message_types.VoidMessage, [MaleResponseMessage, FemaleResponseMessage])

もちろん、スーパーメッセージクラスを宣言するオプションもあります。たとえば、またはのいずれかPersonResponseMessageをラップします。しかし、上記のスニペットに似たものはありますか?MaleResponseMessageFemaleResponseMessage

編集:

自分の提案を実行しようとして、行き詰まりました。2つのメッセージタイプに共通するのはリクエストだけです。まったく同じリクエストフィールド(追加のブール値をfemale=true/false含む)PersonRequestMaleResponseMessageとにFemaleResponseMessageは共通のフィールドがありません。だから私は@bossylobsterが示すように、1つのエンドポイントメソッドを使用しています。

if request.female : # request.female == True
    return get_female(etc, etc)
else: # request.female == False // implies male
    return get_male(etc,etc)

応答には、次のようなものが必要です

class PersonResponse(messages.Message):
  if ??? :
     item = messages.MessageField(MaleResponseMessage,1)
  else:
      item = messages.MessageField(FemaleResponseMessage,1)

何をチェックすればいいのかわかりません???isinstanceまず、またはについて考えましtypeた。しかし、どうすればよいでしょうか。以下は機能しますか?

class PersonResponse(messages.Message):
  if type(Message()) == MaleResponseMessage :
     item = messages.MessageField(MaleResponseMessage,1)
  else:
      item = messages.MessageField(FemaleResponseMessage,1)
4

2 に答える 2

3

残念だけど違う。1つの応答と1つの要求スキーマのみを持つことができます。これは、それらがGoogleのAPIインフラストラクチャに登録されており、厳密なスキーマを持つことがリクエストの速度と効率を提供するためです。

最善の策は、各男性と女性に必要なフィールドを1つのモデルクラスに結合し、独自の検証を行うことです。

考えられる解決策は次のようになります

from protorpc import messages

class Gender(messages.Enum):
    MALE = 0
    FEMALE = 1

class GenderRequest(messages.Enum):
    gender = messages.EnumField(Gender, 1, required=True)

class PersonResponse(messages.Message):
    gender = messages.EnumField(Gender, 1)
    # shared fields
    # female specific fields
    # male specific fields

そしてあなたの実際の方法で

    @endpoints.method(GenderRequest, PersonMessage, ...)
    def my_method(self, request):
      if request.gender == Gender.MALE:
          return male_response(request)
      elif request.gender == Gender.FEMALE:
          return female_response(request)
      else:
          # This should never occur since gender is required
          raise endpoints.BadRequestException('Gender not set.')

ここでmale_response、およびは、男性と女性female_responseに対応するインスタンスを作成するメソッドです。PersonMessage

于 2013-03-20T16:43:52.410 に答える
2

2つの異なるエンドポイントメソッドを使用できます。

于 2013-03-21T22:08:17.040 に答える