python-3.x - 如何为返回json和字符串的方法创建responsr对象
问题描述
如下所示,我有两个具有以下路由的 Web 服务
@app.route("/", methods=['GET','POST'] )
@app.route("/getDistanceFromOriginToDestination/<string:originAndDestinationGPSCoords>", methods=['GET'] )
下面发布的 .yaml 文件包含使用 OpenAPi 和 Swagger 生成 api 文档所需的代码。
方法 rootTest 返回一个 json 响应,如下所示,而方法 getDistanceFromOriginToDestination 以字符串形式返回距离 如何为下面提到的两种方法创建响应对象
yaml:
openapi: '3.0.2'
info:
title: &apiTitle "Distance computation between two GPS coordinates micro-service API."
description: "This micro-service accepts or receives four comma separated GPS coordinates in the
following order, startLongitude, startLatitude, endLongitude
, endLatitude in a URL. The URL is fetched and consumed, then it returns back a
response in a form of json file. The json file is to be fetched for the distance which represents the
distance between
the provided GPS coordinates"
version: '1.0'
termsOfService: "http://127.0.0.1:5000/getDistance/terms"
contact:
name: " "
url: "http://127.0.0.1:5000"
email: "amrmb09@yahoo.com"
license:
name: "CC Attribution-ShareAlike 4.0 (CC BY-SA 4.0)"
url: "https://openweathermap.org/price"
servers:
- url: http://127.0.0.1:5000/
description: Local host for API service
paths:
/:
get:
tags:
- get distance tag
summary: get the distance between 8.681436,49.414554,8.681561,49.414747
description: to display data in json formate
operationId: get distance between default coordinates
responses:
"200":
description: Successful response
'400':
description: Invalid request
content:
application/json:
schema:
type: object
properties:
message:
type: string
'401':
description: Authorization information is missing or invalid.
'404':
description: A user with the specified ID was not found.
'5XX':
description: Unexpected error.
/getDistanceFromOriginToDestination/{originAndDestinationGPSCoords}:
get:
tags:
- get distance tag
- get distance in kilometers tag
summary: get the distance between two GPS coordinates in Kilometers.
description: originAndDestinationGPSCoords represents the start and end GPS coordinates in the
following order longitude and latitude respectively. Passing the start and end
GPS cootdinates in the URL will result in invoking and communicating with OpenRouteService.
The latter service will send a response in a form of json
file.The JSON file will be fetched for the distance. The distance fetched, is the distance
between the GPS coordinates entered and it is in meters, however
they are displayed to the users in Kilometers.
operationId: com.get.distance.from.gps.coordinates
parameters:
- $ref: '#/components/parameters/originAndDestinationGPSCoords'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/200_v2'
'400':
description: Bad request. User ID must be an integer and larger than 0.
'401':
description: Authorization information is missing or invalid.
'404':
description: A user with the specified ID was not found.
'5XX':
description: Unexpected error.
components:
parameters:
originAndDestinationGPSCoords:
name: originAndDestinationGPSCoords
in: path
description: Start and end GPS coordinates as comma separated values in terms of longitude and
latitude respectively. For example
12.497366,41.922782,-3.606997572,40.47416477
required: true
schema:
type: number
format: float
allowEmptyValue: false
schemas:
200_v1:
title: Successful response
type: object
200_v2:
title: Successful response
type: string
properties:
distance:
$ref: '#/components/schemas/distance'
distance:
title: distance
type: number
format: float
securitySchemes:
BasicAuth:
type: http
scheme: basic
代码:
############################################################
#micro-services
############################################################
@app.route("/", methods=['GET','POST'] )
def rootTest():
baseURL = "https://api.openrouteservice.org/v2/directions/driving-car?api_key=5bvbde35971110001483862480ecf8c403567479a87de01df5da651fb&start=8.681436,49.414554&end=8.681561,49.414747"
with urllib.request.urlopen(baseURL) as response:
print ("str(response): " + str(response))
print ("str(response.getCode(): " + str(response.getcode()))
data = response.read()
print ("response.read(): " + str(data))
dataAsJSONObject = json.loads(data)
distance = str(dataAsJSONObject["features"][0]['properties']['summary']['distance'])
return dataAsJSONObject #config['EndPoint']['url'] + config['EndPoint']['api_key'] + "&start=" + startLat + "," + startLng + "&end=" + end1Lat + "," + endLng + ""
@app.route("/getDistanceFromOriginToDestination/<string:originAndDestinationGPSCoords>", methods=['GET'] )
def getDistanceFromOriginToDestination(originAndDestinationGPSCoords):
#api_key = request.args.get('api_key')
# startLat, startLng= request.args.get('start').split(',')
# end1Lat, endLng = request.args.get('end').split(',')
global gpsCoordinates
gpsCoordinates = originAndDestinationGPSCoords
distance = 'distance could not be fetched.please enter four comma separated values and observe the order in which the coordinates must follow startLongitude,startLatitude,endLongitude,endLatitude'
isCohesiveData = checkDataCohesion(gpsCoordinates)
if (isCohesiveData):
print("data is cohesive")
data = fetchDataForURL(getBaseURL(gpsCoordinates))
distance = fetchJSONForDistance(data)
else:
print("data is not cohesive")
return distance
dist = float(distance)
dist = dist/1000
return ' %f km from Lng1:%s, Lat1:%s to Lng2:%s, Lat2:%s'%(getDistanceFromOriginToDestinatioInKilometers(float(distance)),getStartLng(), getStartLat(), getEndtLng(), getEndLat())
解决方案
推荐阅读
- c++ - 将字符串作为输入并将其拆分为单词的函数。标点符号应该被忽略
- javascript - 您将如何创建一个自动昵称系统,每个新成员的昵称数量都会增加?
- angular - 需要帮助:Angular 路由器和导航项目不起作用
- java - 自 Wildfly 15 以来,Arquillian 托管测试不再有效
- javascript - 如何使用 react-big-calendar 获取时间段的时间?
- javascript - 使用来自 AJAX 调用的动态 HTML 重新渲染 Vue 组件
- vba - 如何让 Shapes.HasTitle 找到演示文稿中的所有标题(VBA、.ppt)?
- firebase - Firestore 增量浮点问题
- sql - SQL - 如果数据不可用,则获取默认 NULL 值
- javascript - 如何在 jQuery 中通过销毁和再次绘制来重绘 DataTables