如何为Cloud Endpoints服务器构建Google Python API?能否复用现有库?
可以复用
googleapiclient调用自定义Cloud Endpoints端点 当然可以!googleapiclient.discovery.build()本质上是通过Discovery文档来生成服务客户端的,而Cloud Endpoints会自动生成符合Google标准的Discovery文档——这意味着你完全能复用这个库来调用自己的自定义端点,用法和调用官方服务几乎一致。
核心思路
Cloud Endpoints部署后,会对外暴露一个Discovery文档(JSON格式),里面定义了你的API所有方法、参数和请求结构。build()函数只要能拿到这个文档,就能像生成Compute服务客户端一样,生成你自定义API的客户端。
具体步骤&示例代码
确认Discovery文档可访问
部署你的Cloud Endpoints后,Discovery文档的默认地址是:https://[你的项目ID].appspot.com/_ah/api/discovery/v1/apis/[你的API名称]/[你的API版本]/rest你可以直接在浏览器里打开这个地址,如果能返回结构化的JSON,说明文档生成正常。
用
build()加载自定义API
只需要在调用build()时,通过discoveryServiceUrl参数指定你的Discovery文档模板地址,其余用法和官方服务一致:from googleapiclient.discovery import build from google.auth import default from google.auth.transport.requests import Request # 处理认证(如果你的API需要认证,和调用官方服务逻辑一致) creds, project_id = default() if not creds.valid: creds.refresh(Request()) authorized_http = creds.authorize(Request()) # 构建自定义API的服务客户端 service = build( 'my_custom_api', # 替换成你的API名称 'v1', # 替换成你的API版本 http=authorized_http, # 替换成你的Discovery文档模板地址 discoveryServiceUrl='https://your-project-id.appspot.com/_ah/api/discovery/v1/apis/{api}/{apiVersion}/rest' ) # 调用自定义API方法(示例:假设你的API有一个get_user方法) response = service.get_user(user_id='123').execute() print(response)
注意事项
- 如果你的API是公开无需认证的,可以不用处理授权,直接传
http=None或者一个普通的requests.Session实例。 - 调用自定义方法时,参数和请求体的用法和官方服务完全一致——比如需要传请求体就用
body参数,路径参数直接作为方法的关键字参数传入。 - 确保你的Cloud Endpoints部署配置正确,比如
openapi.yaml或swagger.json里的API名称、版本和Discovery文档地址里的一致。
内容的提问来源于stack exchange,提问作者Ganesh Prabhu UK
相关产品推荐
相关产品推荐

