<p>在你的例子中,你有一个非常简单的布局,它并不真的符合被问的问题,或者,IMHO,我认为你实际上想问的是什么。在</p>
<p>我自己正在开发一个更加复杂的端点API,但是它使用两个不同的模型为API调用设计请求和响应对象;但是,它们嵌套在另一个(或多个)中。我在App Engine日志中找到了一个提示,提示我应该使用该方法作为警告:</p>
<pre><code>Method csapi.user.XXXXX specifies path parameters but you are not using a ResourceContainer. This will fail in future releases; please switch to using ResourceContainer as soon as possible.
</code></pre>
<p><strong>请注意</strong>;ResourceContainers可能非常棘手,需要您将从protorpc导入的<code>messages.Message</code>分类。有关ResourceContainers的说明,请参阅<a href="https://stackoverflow.com/questions/19048440/what-are-resourcecontainers-and-how-to-use-them-for-cloud-endpoints">this</a>StackOverflow答案。在</p>
<p>以您的示例为基础,我们需要构建资源容器,以复制我们希望返回给被调用方的模型中的内容。在</p>
^{pr2}$
<p>如您所见,这比您的简单示例要深入得多。在</p>
<p><strong>加分:</strong>使用路径参数</p>
<p>如果您希望接受方法的路径参数,例如假设的用户的id属性(即<code>path='users/{id}/delete'</code>),我们将在方法本身前面添加以下块来使用它:</p>
<pre class="lang-python prettyprint-override"><code>MY_REQUEST_RESOURCE_PAGE = endpoints.ResourceContainer(
message_types.VoidMessage,
id=messages.StringField(1, variant=messages.Variant.STRING),
accountType=messages.EnumField(Account_Type, 2, required=True)
isActive=messages.BooleanField(3, required=True),
thisAcctEmail=messages.StringField(4, variant=messages.Variant.STRING),
subscriberSince=messages.message_types.DateTimeField(5),
cursor=messages.StringField(6, variant=messages.Variant.STRING, required=False, default="1"),
limit=messages.IntegerField(7, variant=messages.Variant.INT32, required=False, default=10)
)
</code></pre>
<p><strong>注意:</strong>注意附加属性<code>cursor</code>和{<cd4>},它们允许对有数百个用户的情况下返回的结果进行分页;正是为了这个目的,这些属性经常在模型查询中使用。在</p>
<p>现在,要完成接受路径参数的更改,请替换上面示例中的以下行:</p>
<pre><code>response_message=MyUserResponseMessage,
</code></pre>
<p>有了这个:</p>
<pre><code>MY_REQUEST_RESOURCE_PAGE , MyUserResponseMessage,
</code></pre>
<p>最后,不管是否使用路径参数,此设置允许您在<code>MyUserResponseMessage</code>内嵌套一个或多个<code>MySubscriptionResponseMessage</code>项,以返回被调用方,就像<code>MyUser</code>模型可能包含多个<code>MySubscription</code>模型一样。这不需要向api方法添加任何内容,因为它已经是<code>MyUserResponseMessage</code>中的嵌套项。此外,如果不需要将模型中的项返回给被调用方,则不需要在响应消息中复制这些项。在</p>