用python寫一個restful API
阿新 • • 發佈:2018-03-20
python restful
# -*- coding: utf-8 -*-
# 作者: 煮酒品茶
"""
package.module
~~~~~~~~~~~~~~
python實現的圖書的一個restful api.
參考restful設計指南 URL:
http://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寫一個restful API