構建基于Flask和Swagger的restful service

使用flask_restplus構建Microservice服務

swagger是什么就不必贅述了, 現在基本上已經成了事實上的工業(yè)標準,所有的restful api,要么自己寫一坨惡心的靜態(tài)頁面來介紹自己的restful api的使用,要么使用swagger 簡潔清爽的展示。

安裝

如果有pypi,照舊還是使用: pip install flask_restplus
如果沒有pypi,就略麻煩,需要看下swagger的版本號,我當前的環(huán)境是2.2.6版本,就需要先安裝好模塊相關的依賴之后,將swagger的2.26版本放入 flask_restplus目錄之中,然后重命名為static,最后輸入:python setup.py develop

構建簡單的restful api

from flask import Flask
from flask_restplus import Api, Resource, fields

app = Flask(__name__)
api = Api(app)

@api.route('/language')
class language(Resource):
    def get(self):
        return {'hi': 'there'}

if __name__ == '__main__':
    app.run(debug=True)

然后打開http://127.0.0.1:5000,直接就可以看到swagger的頁面,點擊"Try it out"按鈕,就可以看得到想要的{'hi': 'there'}頁面了。

但這也太簡單了,我們使用restful api的目的還是要和server端的后臺進行交互,而不是返回一個固定的值。

from flask import Flask
from flask_restplus import Api, Resource, fields

app = Flask(__name__)
api = Api(app)

languages = list()
python = {'language': 'python'}
languages.append(python)

@api.route('/language')
class language(Resource):
    def get(self):
        return languages

if __name__ == '__main__':
    app.run(debug=True)

這樣就實現了一個簡單的交互,從后臺取出相應的數據。

但是這僅僅只是取數據,并沒有辦法添加數據,這時候可以用post方法。

from flask import Flask
from flask_restplus import Api, Resource, fields

app = Flask(__name__)
api = Api(app)

a_language = api.model('language', {
    'language': fields.String('TheLanguage')
})

languages = list()
python = {'language': 'python'}
languages.append(python)

@api.route('/language')
class language(Resource):
    def get(self):
        return languages

    @api.expect(a_language)
    def post(self):
        languages.append(api.payload)
        return {'result': 'language added'}, 201

if __name__ == '__main__':
    app.run(debug=True)

這時候看起來還不錯,在右邊的example中,可以直接點擊,就插入了payload框中。

然后在post頁面中添加內容,在get頁面中就可以看到,用swagger測試,很直接。

from flask import Flask
from flask_restplus import Api, Resource, fields

app = Flask(__name__)
api = Api(app)

a_language = api.model('language', {
    'language': fields.String('TheLanguage')
})

languages = list()
python = {'language': 'python', 'id': 1}
languages.append(python)

@api.route('/language')
class language(Resource):
    @api.marshal_with(a_language)
    def get(self):
        return languages

    @api.expect(a_language)
    def post(self):
        new_language = api.payload
        new_language['id'] = len(languages) + 1
        languages.append(new_language)
        return {'result': 'language added'}, 201

if __name__ == '__main__':
    app.run(debug=True)

我們在這里使用了marshal_with函數來限定了返回的格式,此時我們雖然在python字典里面初始化了id,但是在a_language這個對象里沒有定義。

from flask import Flask
from flask_restplus import Api, Resource, fields

app = Flask(__name__)
api = Api(app)

a_language = api.model('language', {
    'language': fields.String('TheLanguage')
    'id': fields.Integer('ID')
})

languages = list()
python = {'language': 'python', 'id': 1}
languages.append(python)

@api.route('/language')
class language(Resource):
    @api.marshal_with(a_language, envelope='data') # envelope在這里
    def get(self):
        return languages

    @api.expect(a_language)
    def post(self):
        new_language = api.payload
        new_language['id'] = len(languages) + 1
        languages.append(new_language)
        return {'result': 'language added'}, 201

if __name__ == '__main__':
    app.run(debug=True)

簡單說這些,很多都是基于這個blog:http://michal.karzynski.pl/blog/2016/06/19/building-beautiful-restful-apis-using-flask-swagger-ui-flask-restplus/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,840評論 6 427
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 3,127評論 1 3
  • Python常用庫大全,看看有沒有你需要的。 環(huán)境管理 管理 Python 版本和環(huán)境的工具 p – 非常簡單的交...
    XDgbh閱讀 15,991評論 4 147
  • 文/編: 夕顏 | 夕顏1977 其實,這是一篇談養(yǎng)生的文章筆記。你們先不要憂桑的走開…… 2017年,2月3日,...
    夕顏1977閱讀 996評論 0 1
  • DES定義(百度百科) DES對稱加密,對稱加密,是一種比較傳統(tǒng)的加密方式,其加密運算、解密運算使用的是同樣的密鑰...
    航行在藍天的螞蚱閱讀 853評論 0 3

友情鏈接更多精彩內容