flask编写RESTful API

REST

REST(Representational State Transfer)是一种架构风格,表述了网络中客户端于服务端的一种交互,REST本身是不实用的,关键的是如何设计它。REST架构就是为了HTTP协议设计的。RESTful web services的核心概念是管理资源。资源是由URIs来表示,客户端使用HTTP当中的’POST,GET, PUT, DELETE’等方法发送请求到服务器,改变相应的资源状态。
在这里插入图片描述

REST的六个特性:
  • 1.服务器端与客户端分离。
  • 2.无状态.
  • 3.可缓存
  • 4.分层结构
  • 5.统一接口
  • 6.按需执行代码

flask

Flask是一个基于Python开发的微型web框架,其中Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户。

一个简单的例子:

from flask import Flask
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello World!'
 
if __name__ == '__main__':
    app.run()

使用flask构建REST服务

这里又两种方法构造服务,第一中就是利用flask的路由进行构造,另外一种就是利用flask 的扩展插件来构造。首先我们假定一种业务场景:
做一个最简单的图书馆里系统,实现如下功能

  • 图书列表返回
  • 返回指定图书的信息(书名,价格,作者)
  • 新增一本书
  • 删除一本书
  • 更新书本的信息(涨价了)

了解过HTTP的都了解这该如何做,那么使用flask 会怎么构造服务呢?又两种办法1. 利用路由写。2.利用flask的扩展插件写接卸来就开始介绍这两种方法如何实现吧!

利用路由实现功能

在实现之前可以使用postman 对接口进行测试

from flask import Flask, jsonify, abort, request
app = Flask(__name__)
books = [
    {
        'id': 1,
        'title': u'论语',
        'auther': u'孔子',
        'price': 18
    },
    {
        'id': 2,
        'title': u'道德经',
        'auther': u'老子',
        'price': 15
    }
]

@app.route('/bookstore/api/v1/books', methods=['GET'])
def get_tasks():
    return jsonify({'books': books})


@app.route('/bookstore/api/v1/books/<int:id>', methods=['GET'])
def get_task(id):
    for book in books:
        if book['id']==id:
            return jsonify({'book': book})
    abort(404)


@app.route('/bookstore/api/v1/books/', methods=['POST'])
def create_task():
    if not request.form or not 'title' in request.form:
        abort(400)
    book = {
        'id': books[-1]['id'] + 1,
        'title': request.form['title'],
        'auther': request.form['auther'],
        'price': request.form['price'],
    }
    books.append(book)
    return jsonify({'book': book}), 201

@app.route('/bookstore/api/v1/books/<int:id>', methods=['PUT'])
def update_book(id):
    for book in books:
        if book['id']==id:
            book["title"] = request.form['title']
            book["auther"] = request.form['auther']
            book["price"] = request.form['price']
        return jsonify({'books': books})
    abort(400)


@app.route('/bookstore/api/v1/books/<int:id>', methods=['DELETE'])
def delete_task(id):
    for book in books:
        if book['id']==id:
            books.remove(book)
            return jsonify({'result': True})
    abort(404)

    return jsonify({'result': True})


if __name__ == '__main__':
    app.run(debug=True)
获取所有的书列表

在这里插入图片描述

获取指定书的信息

在这里插入图片描述

新增一本书

在这里插入图片描述

更新信息

在这里插入图片描述

删除书籍

在这里插入图片描述

利用flask的插件编写

未完待续

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值