溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

restapi的設計細節(jié)和實施是什么樣的

發(fā)布時間:2022-01-18 11:32:05 來源:億速云 閱讀:152 作者:柒染 欄目:云計算

今天就跟大家聊聊有關restapi的設計細節(jié)和實施是什么樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。

在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資源,現(xiàn)在把它稍微改下。

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

注意?。何野l(fā)送的是JSON數(shù)據(jù),所以要修改http head為application/json,另外:

'{"name":"hochikong"}'

JSON數(shù)據(jù)中的字符串要用雙引號,否則會報錯。而JSON數(shù)據(jù)外還需要套一個引號

我的完整代碼:

__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這個參數(shù)后加‘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

發(fā)送請求測試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$

發(fā)送請求測試自定義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請求格式,各種功能各種格式,我也是醉了

補充:

外部可見的服務器
運行服務器后,會發(fā)現(xiàn)只有你自己的電腦可以使用服務,而網(wǎng)絡中的其他電腦卻不行。 缺省設置就是這樣的,因為在調試模式下該應用的用戶可以執(zhí)行你電腦中的任意 Python 代碼。

如果你關閉了 調試 或信任你網(wǎng)絡中的用戶,那么可以讓服務器被公開訪問。只要像 這樣改變 run() 方法的調用:

app.run(host='0.0.0.0')
這行代碼告訴你的操作系統(tǒng)監(jiān)聽一個公開的 IP 。

看完上述內容,你們對restapi的設計細節(jié)和實施是什么樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI