共計 3223 個字符,預計需要花費 9 分鐘才能閱讀完成。
今天就跟大家聊聊有關 restapi 的設計細節和實施是什么樣的,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
在 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)
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 的設計細節和實施是什么樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。