您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關restapi的設計細節和實施是什么樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
在RESTful API的設計中,我打算自定義一個請求頭,把token放進去以便向其他sora組件請求服務。
于是,把之前的代碼稍微改成這樣:
parser.add_argument('auth-token',type=str,help='put the token here',location='headers')
引用該值時,用法如下:
class TodoSimple(Resource): def get(self,todo_id): args = parser.parse_args() if args['auth-token'] == 'thisismytoken': return {todo_id:todos[todo_id]} else: return {'error':'token error'},401 def put(self,todo_id): todos[todo_id] = request.form['data'] return {todo_id:todos[todo_id]}
直接
args = parser.parse_args()
然后讀取其中的值即可。
另外,之前的測試我只是簡單地用-d指定“name=hochikong”操作getname資源,現在把它稍微改下。
class GetName(Resource): def post(self): args = parser.parse_args() name = args['name'] #name = {} #name['ac'] = args['name'] #name = request.json.get('name') return {'yourame':name}
但是curl的請求則變成這樣:
curl -i -X POST -H 'Content-Type:application/json' -d '{"name":"hochikong"}' http://localhost:5000/getname
注意!:我發送的是JSON數據,所以要修改http head為application/json,另外:
'{"name":"hochikong"}'
JSON數據中的字符串要用雙引號,否則會報錯。而JSON數據外還需要套一個引號
我的完整代碼:
__author__ = 'hochikong' from flask import Flask,request from flask.ext.restful import Resource,Api,reqparse app = Flask(__name__) api = Api(app) todos = {'task':'get the list of docker'} parser = reqparse.RequestParser() parser.add_argument('name',type=str,help='get the name') #因為這句話“By default, the RequestParser tries to parse values from flask.Request.values, and flask.Request.json.”, #我們不需要在name這個參數后加‘location=json’,不過加了也無妨 parser.add_argument('auth-token',type=str,help='put the token here',location='headers') class TodoSimple(Resource): def get(self,todo_id): args = parser.parse_args() if args['auth-token'] == 'thisismytoken': return {todo_id:todos[todo_id]} else: return {'error':'token error'},401 def put(self,todo_id): todos[todo_id] = request.form['data'] return {todo_id:todos[todo_id]} class GetName(Resource): def post(self): args = parser.parse_args() name = args['name'] #name = {} #name['ac'] = args['name'] #name = request.json.get('name') return {'yourame':name} api.add_resource(TodoSimple,'/<string:todo_id>') api.add_resource(GetName,'/getname') if __name__ == '__main__': app.run()
啟動:
python flaskrr.py
發送請求測試getname資源:
hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$ curl -i -X POST -H 'Content-Type:application/json' -d '{"name":"hochikong"}' http://localhost:5000/getname HTTP/1.0 200 OK Content-Type: application/json Content-Length: 24 Server: Werkzeug/0.10.1 Python/2.7.6 Date: Sat, 11 Apr 2015 14:07:03 GMT {"yourame": "hochikong"} hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$
發送請求測試自定義head:
hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$ curl -X GET -H 'auth-token:thisismytoken' http://localhost:5000/task {"task": "get the list of docker"} hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$
如果token不對:
hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$ curl -X GET -H 'auth-token:thisisyourtoken' http://localhost:5000/task {"error": "token error"} hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$
測試成功。
不過設計RESTful API最辛苦的還是設計JSON請求格式,各種功能各種格式,我也是醉了
補充:
外部可見的服務器。
運行服務器后,會發現只有你自己的電腦可以使用服務,而網絡中的其他電腦卻不行。 缺省設置就是這樣的,因為在調試模式下該應用的用戶可以執行你電腦中的任意 Python 代碼。如果你關閉了 調試 或信任你網絡中的用戶,那么可以讓服務器被公開訪問。只要像 這樣改變 run() 方法的調用:
app.run(host='0.0.0.0')
這行代碼告訴你的操作系統監聽一個公開的 IP 。
看完上述內容,你們對restapi的設計細節和實施是什么樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。