如何修复 Flask RESTful api 服务器端点失败问题?
how to fix Flask RESTful api server endpoint failing problem?
我是使用 openapi sepc 进行 api 开发的新手,所以我遵循了 this blog 我刚刚使用服务器工件来理解代码的地方。我使用 /openapi/photo_album/codegen_server
进行简单的工作。为此,我下载了文件并尝试 运行 默认服务器端点上的服务器。我安装了所有必需的依赖项并点击 python -m openapi_server
,但浏览器端点总是用以下错误消息烦扰我:
{ "detail": "The requested URL was not found on the server. If you
entered the URL manually please check your spelling and try again.",
"status": 404, "title": "Not Found", "type": "about:blank" }
我的尝试
我还尝试了以下方法:
import connexion
from openapi_server import encoder
def main():
app = connexion.App(__name__, specification_dir='./openapi/')
app.app.json_encoder = encoder.JSONEncoder
app.add_api('openapi.yaml', arguments={'title': 'Sample OpenAPI Specification'})
app.run(host='127.0.0.1',port=5000, debug=True)
if __name__ == '__main__':
main()
我尝试关闭防火墙并尝试访问服务器端点,但仍然无法正常工作。我正在为我的系统使用 windows-x64,这是我第一次尝试使用 api 开发。我不知道发生了什么以及如何解决我的问题。即使我在 cmd 上尝试了 route print -4
和 ping 127.0.0.1
并尝试使用本地 ipv4 地址,但仍然无法正常工作。我的意图是向默认服务器端点发出请求并进行基本 api 测试。任何人都可以提供可能的解决方案来解决这个错误吗?任何快速解决方案?谢谢
更新:
我在我的 windows 机器上尝试了任何 flask rest api 示例项目,其中 none 工作正常,服务器端点总是失败。那是因为我的本地机器设置吗?这个错误要了我的命,如何解决这个问题?任何快速解决方案?谢谢
我通过更新 requirements
中的 connexion==2.6.0
解决了这个问题。此外,对 host
、port
使用不同的值将 运行 默认端点上的服务器。这个 source code 有一些问题,因为代码是由 openapi 代码生成器生成的,不能保证示例 api 服务器 运行。我最近对 api 开发的观察是使用 flask-restplus,它在服务器端点上带有漂亮的 UI api 视图。
这是使用 flask-restplus 进行的测试 api,希望 flask-restplus API 开发的新手发现它有用。
from flask import Flask
from flask_restplus import Api, fields, Resource, marshal
app = Flask(__name__)
api = Api()
api.init_app(app)
metadata_model = api.model("metadata", {
'file': fields.String()
})
user_model = api.model('UserModel', {
"user_id": fields.Integer(required=True, description=''),
"user_name": fields.String(required=True, description=''),
"user_role": fields.String(required=False, description='')
})
response_model = api.model("Result", {
'metadata': fields.List(fields.Nested(metadata_model)),
'result': fields.Raw()
})
@api.route("/test")
class ApiView(Resource):
@api.marshal_with(response_model)
def get(self):
data = {'metadata': {},
'result': self.get_user()}
return data
def get_user(self):
# Access database and get data
user_data = [{'user_id': 1, 'user_name': 'John', 'user_role': 'editor'},
{'user_id': 2, 'user_name': 'Sue', 'user_role': 'curator'}]
# The kwarg envelope does the trick
return marshal(user_data, user_model, envelope='data')
app.run(host='127.0.0.1', port='8080', debug=True)
我是使用 openapi sepc 进行 api 开发的新手,所以我遵循了 this blog 我刚刚使用服务器工件来理解代码的地方。我使用 /openapi/photo_album/codegen_server
进行简单的工作。为此,我下载了文件并尝试 运行 默认服务器端点上的服务器。我安装了所有必需的依赖项并点击 python -m openapi_server
,但浏览器端点总是用以下错误消息烦扰我:
{ "detail": "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.",
"status": 404, "title": "Not Found", "type": "about:blank" }
我的尝试
我还尝试了以下方法:
import connexion
from openapi_server import encoder
def main():
app = connexion.App(__name__, specification_dir='./openapi/')
app.app.json_encoder = encoder.JSONEncoder
app.add_api('openapi.yaml', arguments={'title': 'Sample OpenAPI Specification'})
app.run(host='127.0.0.1',port=5000, debug=True)
if __name__ == '__main__':
main()
我尝试关闭防火墙并尝试访问服务器端点,但仍然无法正常工作。我正在为我的系统使用 windows-x64,这是我第一次尝试使用 api 开发。我不知道发生了什么以及如何解决我的问题。即使我在 cmd 上尝试了 route print -4
和 ping 127.0.0.1
并尝试使用本地 ipv4 地址,但仍然无法正常工作。我的意图是向默认服务器端点发出请求并进行基本 api 测试。任何人都可以提供可能的解决方案来解决这个错误吗?任何快速解决方案?谢谢
更新:
我在我的 windows 机器上尝试了任何 flask rest api 示例项目,其中 none 工作正常,服务器端点总是失败。那是因为我的本地机器设置吗?这个错误要了我的命,如何解决这个问题?任何快速解决方案?谢谢
我通过更新 requirements
中的 connexion==2.6.0
解决了这个问题。此外,对 host
、port
使用不同的值将 运行 默认端点上的服务器。这个 source code 有一些问题,因为代码是由 openapi 代码生成器生成的,不能保证示例 api 服务器 运行。我最近对 api 开发的观察是使用 flask-restplus,它在服务器端点上带有漂亮的 UI api 视图。
这是使用 flask-restplus 进行的测试 api,希望 flask-restplus API 开发的新手发现它有用。
from flask import Flask
from flask_restplus import Api, fields, Resource, marshal
app = Flask(__name__)
api = Api()
api.init_app(app)
metadata_model = api.model("metadata", {
'file': fields.String()
})
user_model = api.model('UserModel', {
"user_id": fields.Integer(required=True, description=''),
"user_name": fields.String(required=True, description=''),
"user_role": fields.String(required=False, description='')
})
response_model = api.model("Result", {
'metadata': fields.List(fields.Nested(metadata_model)),
'result': fields.Raw()
})
@api.route("/test")
class ApiView(Resource):
@api.marshal_with(response_model)
def get(self):
data = {'metadata': {},
'result': self.get_user()}
return data
def get_user(self):
# Access database and get data
user_data = [{'user_id': 1, 'user_name': 'John', 'user_role': 'editor'},
{'user_id': 2, 'user_name': 'Sue', 'user_role': 'curator'}]
# The kwarg envelope does the trick
return marshal(user_data, user_model, envelope='data')
app.run(host='127.0.0.1', port='8080', debug=True)