用Python语言写一个restful API
小标 2019-01-02 来源 : 阅读 1934 评论 0

摘要:本文主要向大家介绍了用Python语言写一个restful API,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了用Python语言写一个restful API,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

"""

    package.module

    ~~~~~~~~~~~~~~

    python实现的图书的一个restful api.

    参考restful设计指南 URL:

        //www.ruanyifeng.com/blog/2014/05/restful_api.html

    restful api 一般模式:

        GET(SELECT):从服务器取出资源(一项或多项)。

        POST(CREATE):在服务器新建一个资源。

        PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

        PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。

        DELETE(DELETE):从服务器删除资源。

    注意:

       没有做存储持久化,为了实现例子,实际上应该是从数据库里面拿,而增册改查方法也应该调用

       后端的方法。

    :copyright: (c) YEAR by zwhset.

    :license: GOMEOPS, see LICENSE_FILE for more details.

"""

from flask import Flask, request, jsonify

import random

app = Flask(__name__)

books = [

    dict(id=1, isdn=random.randrange(1, 1000), title='a python book', author=dict(

        name='l0set', city='hunan'

    )),

    dict(id=2, isdn=random.randrange(1, 1000), title='a golang book', author=dict(

        name='zwhset', city='beijing'

    ))

]

# error action

@app.errorhandler(405)

def page_not_found(e):

    return jsonify(dict(code=1, message='method error.')), 405

# get all books

@app.route('/api/books')

def handle_books():

    return jsonify(books)

# get a book

@app.route('/api/book/<int:id>')

def handle_book(id):

    for i, book in enumerate(books):

        if book['id'] == id:

            return jsonify(book)

    return jsonify(dict(code=2, message="don't fund the book"))

# create a new book

@app.route('/api/book', methods=['POST'])

def create_book():

    book = request.json

    # check params

    if  ((not 'title' in book and 'author' in book) or

        (not isinstance(book['author'], dict)) or

        (not 'name' in book['author'] and 'city' in book['author'])):

        return jsonify(code=3, message='json author error.')

    # create a new book

    book['id'] = random.randrange(1, 10000)

    book['isdn'] = random.randrange(1, 10000)

    books.append(book)

    return jsonify(code=0, message='success')

# update book

@app.route('/api/book/<int:id>', methods=['PUT'])

def update_book(id):

    book = request.json

    # check params

    if ((not 'title' in book and 'author' in book) or

            (not isinstance(book['author'], dict)) or

            (not 'name' in book['author'] and 'city' in book['author'])):

        return jsonify(code=3, message='json author error.')

    # 安全考虑,只拿要的数据,其它的不要

    book_data = dict(title=book['title'],

                     author=dict(

                         name=book['author']['name'],

                         city=book['author']['city']

                     ))

    for i, book in enumerate(books):

        # check id

        if book['id'] == id:

            books[i].update(book_data) # 进行更新操作

            return jsonify(code=0, message='success')

    return jsonify(dict(code=2, message="don't fund the book"))

# delete a book

@app.route('/api/book/<int:id>', methods=['DELETE'])

def delete_book(id):

    for i, book in enumerate(books):

        # check id

        if book['id'] == id:

            del books[i] # 删除书

            return jsonify(code=0, message='success')

    return jsonify(dict(code=2, message="don't fund the book"))

if __name__ == '__main__':

    app.run(host='0.0.0.0', port=8000)

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程