1. 程式人生 > >用python寫一個restful API

用python寫一個restful API

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