Как исправить ошибку Flask RESTful API конечной точки сервера сбой? - PullRequest
2 голосов
/ 15 апреля 2020

Я новичок в разработке API с использованием OpenAPI SEP c, поэтому я следовал этот блог , где я только что использовал серверный артефакт, чтобы понять код. Я использовал /openapi/photo_album/codegen_server для моей простой работы. Для этого я скачал файл и попытался запустить сервер на конечной точке сервера по умолчанию. Я установил все необходимые зависимости и нажал python -m openapi_server, но конечная точка браузера всегда продолжает выдавать мне сообщение об ошибке:

{"detail": "Запрошенный URL-адрес не найден на сервере. Если вы введите URL-адрес вручную, проверьте правильность написания и повторите попытку. ",
" 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. Я не знаю, что происходит и как решить мою проблему. даже я попытался route print -4 и ping 127.0.0.1 на cmd и попытался использовать локальный адрес IPv4, но все еще не работает. Мое намерение состоит в том, чтобы сделать запрос к конечной точке сервера по умолчанию и выполнить базовое тестирование API. Кто-нибудь может предложить возможное решение, как исправить эту ошибку? любое быстрое решение? спасибо

обновление :

Я попробовал любой пример flask rest api образец на моей windows машине, ни один из них не работает, конечная точка сервера всегда терпит неудачу. Это из-за моей локальной настройки машины? эта ошибка убивает меня, как это исправить? любое быстрое решение? спасибо

1 Ответ

1 голос
/ 22 апреля 2020

Я решил эту проблему, обновив connexion==2.6.0 в requirements. Также, используя другое значение для host, port будет запускать сервер в конечной точке по умолчанию. Этот исходный код имеет некоторые проблемы, так как код генерируется генератором кода openapi, поэтому нет гарантии, что пример API-сервера будет работать. Мое недавнее наблюдение за разработкой API, это использовать flask -restplus, который поставляется с хорошим представлением API пользовательского интерфейса на конечной точке сервера.

Это тестовый API с использованием flask -restplus. Надеюсь, любой, кто не знаком с разработкой 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)
...