2

我目前正在做一个需要编写 GET 处理程序的小项目。我正在使用端点文档中提供的 Echo 示例。

我有我的资源容器:

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" http://localhost:8080/_ah/api/echo/v1/echo/getEmails?trailingDigits=2&leadingDigits=2

我取回了 trailingDigits 的内容,但是leadingDigits 的默认值

4

3 回答 3

0

ResourceContainer值中未使用的任何字段path都应成为查询参数。

于 2018-04-11T17:36:29.097 回答
0

为了修改参数,您需要为所需路径配置 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",
          }
         ]

是一些有用的文档。

编辑1:

编辑 openapi.json 文件中的参数后,您需要调整 Python 代码以使用这些新参数。

在这种情况下,您需要调整 ResourceContainer 以接受第二个参数。

这是一个例子:

YOUR_RESOURCE_CONTAINER = endpoints.ResourceContainer(
message_types.VoidMessage,
parameter1=messages.IntegerField(1, default=1),
parameter2=messages.IntegerField(2, default=2))

要记住的一件事:使用 curl 时记得在 url 中添加“”。不使用它可能会导致呼叫故障。

于 2018-04-12T10:50:08.583 回答
0

谷歌论坛的这个答案为我解决了这个问题:

您是否在 curl 命令中的 URL 周围使用引号?因为如果不是,并且您在 bash shell 中(如果您使用 curl,这很可能),您实际上可能不会发送&ends_at=THEEND 部分,因为 & 是将命令置于后台的 shell 元字符.

编辑

链接到论坛中的答案 https://groups.google.com/forum/#!msg/google-cloud-endpoints/uzFcUS_uNz0/xyG2qVxbBQAJ

于 2018-06-04T07:57:02.617 回答