首页 > 解决方案 > Swagger 中带有 py2neo 和烧瓶的 API 端点

问题描述

我最近开始使用 Swagger、py2neo 和 flask 库来完成我自己学习的端到端项目。

我打算使用它,因为使用此驱动程序比驱动程序本身py2neo更容易为 neo4j 创建查询。neo4j

我正在尝试复制https://github.com/neo4j-examples/neo4j-movies-template,特别app.py是这样我可以在swagger ui.

一切正常GET

但是,当我这样做时POST,我无法更新数据库。( 查看招摇 UI 的屏幕截图)

如何解决客户端-服务器 POST?

class RateMovie(Resource):
    @swagger.doc({
        'tags': ['movies'],
        'summary': 'Rate a movie from',
        'description': 'Rate a movie from 0-5 inclusive',
        'parameters': [
            
            {
                'name': 'id',
                'description': 'movie tmdbId',
                'in': 'path',
                'type': 'string',
            },
            {
                'name': 'rating',
                'in': 'body',
                'schema': {
                    'type': 'object',
                    'properties': {
                        'rating': {
                            'type': 'integer',
                        },
                    }
                }
            },
        ],
        'responses': {
            '200': {
                'description': 'movie rating saved'
            },
            '401': {
                'description': 'invalid / missing authentication'
            }
        }
    })


    def post(self):

        parser = reqparse.RequestParser()
        parser.add_argument('rating', choices=list(range(0, 6)), type=int, required=True, help='A rating from 0 - 5 inclusive (integers)')
        args = parser.parse_args()
        rating = args['rating']

        def rate_movie(movie_id, rating):
            db=get_db()
            query='''
            MERGE (m:Movie)
            WITH m

            MATCH (m:Movie) 
            where m.title='{}'
            SET m.rating = {}
            RETURN m
            '''.format(movie_id, rating)

            result = db.run(query)
            return [i for i in result]

        return {}



api.add_resource(RateMovie, '/api/v0/ratemovie')

然后我在 Swagger UI 中执行“TRY IT OUT”。

我得到以下回应

127.0.0.1 - - [10/Mar/2021 15:08:57] "POST /api/v0/ratemovie HTTP/1.1" 200 -

但是当我运行查询时,数据库仍然没有更新。

但是,如果我独立运行

def rate_movie(movie_id, rating):
    db=get_db()
    query='''
    MERGE (m:Movie)
    WITH m

    MATCH (m:Movie) 
    where m.title='{}'
    SET m.rating = {}
    RETURN m
    '''.format(movie_id, rating)

    result = db.run(query)
    return [i for i in result]




print(rate_movie(movie_id='The Matrix Reloaded', rating=10))

数据库得到更新。

如何解决客户端-服务器 POST?

标签: flaskneo4jswaggerpy2neo

解决方案


推荐阅读