Google端点获取请求URL参数[Python]
我目前正在做一个小项目,需要编写一个GET处理程序。我是从端点文档中提供的Echo示例开始工作的 我有我的资源容器:Google端点获取请求URL参数[Python],python,python-2.7,google-app-engine,google-cloud-endpoints,google-cloud-endpoints-v2,Python,Python 2.7,Google App Engine,Google Cloud Endpoints,Google Cloud Endpoints V2,我目前正在做一个小项目,需要编写一个GET处理程序。我是从端点文档中提供的Echo示例开始工作的 我有我的资源容器: GET_EMAIL_RESOURCE = endpoints.ResourceContainer( message_types.VoidMessage, i = messages.IntegerField(1, default = 1) ) 我有我的经纪人: @endpoints.method( GET_EMAIL_RESOURCE, EchoR
GET_EMAIL_RESOURCE = endpoints.ResourceContainer(
message_types.VoidMessage,
i = messages.IntegerField(1, default = 1)
)
我有我的经纪人:
@endpoints.method(
GET_EMAIL_RESOURCE,
EchoResponse,
path='echo/getEmails/{i}',
http_method='GET',
name='echo_get_emails'
)
def echo_get_emails(self, request):
if (request.i == 1):
out = "default"
else:
out = "a"*request.i
return EchoResponse(content=out)
为了访问这个,我使用了curl:
curl --request GET --header "Content-Type: application/json" http://localhost:8080/_ah/api/echo/v1/echo/getEmails/3
现在,它可以正常工作并返回您期望的结果,但是如果我需要将更多信息编码到我的URL中,例如:
getEmails/value1=someValue&value2=someOtherValue
我不知道如何做到这一点,也无法在文档中找到解释或示例
任何帮助都将不胜感激
编辑1:
我的代码现在看起来是这样的:
# main.py
GET_EMAIL_RESOURCE = endpoints.ResourceContainer(
message_types.VoidMessage,
i = messages.IntegerField(1, default = 1)
)
@endpoints.method(
GET_EMAIL_RESOURCE,
EchoResponse,
path='echo/getEmails',
http_method='GET',
name='echo_get_emails'
)
def echo_get_emails(self, request):
out = str(request.trailingDigits) + " : " +str(request.leadingDigits)
return EchoResponse(content = out)
在我的openapi.json路径下,我有:
"/echo/v1/echo/getEmails" : {
"get": {
"operationId": "EchoApi_getEmails",
"parameters" : [
{
"name": "trailingDigits",
"in": "query",
"description": "Trailing digits",
"required": true,
"type": "string"
},
{
"name": "leadingDigits",
"in": "query",
"description": "Leading digits",
"required": true,
"type": "string"
}
]
}
}
但是当我运行请求时
curl--request GET--header“Content-Type:application/json”
我得到了trailingDigits的内容,但是leadingDigits的默认值是
资源容器中路径值中未使用的任何字段都应该成为查询参数。为了修改参数,需要为所需路径配置openapi.json文件。下面是一个例子:
"/echo/v1/echo/test": {
"get": {
"operationId": "test",
"parameters": [
{
"name": "paramOne",
"in": "query",
"description": "First parameter test",
"required": true,
"type": "string",
},
{
"name": "paramTwo",
"in": "query",
"description": "Second parameter test",
"required": true,
"type": "string",
}
]
YOUR_RESOURCE_CONTAINER = endpoints.ResourceContainer(
message_types.VoidMessage,
parameter1=messages.IntegerField(1, default=1),
parameter2=messages.IntegerField(2, default=2))
这是一些有用的文档
编辑1:
一旦在openapi.json文件中编辑了参数,就需要修改Python代码以使用这些新参数
在这种情况下,您需要调整ResourceContainer以接受第二个参数
下面是一个例子:
"/echo/v1/echo/test": {
"get": {
"operationId": "test",
"parameters": [
{
"name": "paramOne",
"in": "query",
"description": "First parameter test",
"required": true,
"type": "string",
},
{
"name": "paramTwo",
"in": "query",
"description": "Second parameter test",
"required": true,
"type": "string",
}
]
YOUR_RESOURCE_CONTAINER = endpoints.ResourceContainer(
message_types.VoidMessage,
parameter1=messages.IntegerField(1, default=1),
parameter2=messages.IntegerField(2, default=2))
要记住一件事:使用curl时,请记住在url中添加“”。不使用它可能会导致呼叫故障 这个来自谷歌论坛的答案为我解决了这个问题:
在curl命令中是否在URL周围使用引号?因为如果
不是,而且你在一个bash shell中(如果你是
使用curl),您可能实际上没有在=THEEND处发送&ends\u
part,因为&是一个shell元字符,用于将命令放入
背景
编辑
链接到论坛中的答案
那么我该如何访问查询参数呢?所以我有路径getEmails?value1=someValue,但是我如何从我的方法访问value1?我在文档中找不到有关此的任何信息如果您的ResourceContainer
具有value1=messages.StringField(1)
,那么您的处理程序只需执行request.value1
。我可以正常工作,但是多个值呢?例如,在我的ResourceContainer
中,我有trailingDigits=messages.IntegerField(1,default=1,required=True),leadingDigits=messages.IntegerField(2,default=1,required=True)
当我运行查询getEmail?trailingDigits=7&leadingdights=5
时,trailingDigits可以工作,但leadingdights似乎没有捕获值。我想这是一个bug。如果你不介意提交一个bug,那就太好了。我觉得我的代码更有可能出错,因为这是一个非常简单的问题,以前应该是一个bug,如果这个问题没有得到解决,我会发布一个bug报告,但在我知道它是bug还是现在之前,我很犹豫是否要这样做。我编辑了主要帖子,以显示我所做的更改和自第一篇帖子以来的进展。我在我的openapi.json中设置了这些内容,并发现了问题,我编辑帖子是为了显示我现在所做的事情hi@AnthonyO'Brien我刚刚根据您上次的更新编辑了答案。您可能会将论坛的url添加到您的帖子中。所以其他用户可以跟进。