意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

restapi的设计细节和实施是什么样的

来源:恒创科技 编辑:恒创科技编辑部
2024-01-31 20:41:59

今天就跟大家聊聊有关restapi的设计细节和实施是什么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

在RESTful API的设计中,我打算自定义一个请求头,把token放进去以便向其他sora组件请求服务。

于是,把之前的代码稍微改成这样:


restapi的设计细节和实施是什么样的

parser.add_argument('auth-token',type=str,help='putthetokenhere',location='headers')

引用该值时,用法如下:

classTodoSimple(Resource):
defget(self,todo_id):
args=parser.parse_args()
ifargs['auth-token']=='thisismytoken':
return{todo_id:todos[todo_id]}
else:
return{'error':'tokenerror'},401

defput(self,todo_id):
todos[todo_id]=request.form['data']
return{todo_id:todos[todo_id]}

直接

args=parser.parse_args()

然后读取其中的值即可。

另外,之前的测试我只是简单地用-d指定“name=hochikong”操作getname资源,现在把它稍微改下。

classGetName(Resource):
defpost(self):
args=parser.parse_args()
name=args['name']
#name={}
#name['ac']=args['name']
#name=request.json.get('name')
return{'yourame':name}

但是curl的请求则变成这样:

curl-i-XPOST-H'Content-Type:application/json'-d'{"name":"hochikong"}'http://localhost:5000/getname

注意!:我发送的是JSON数据,所以要修改http head为application/json,另外:

'{"name":"hochikong"}'

JSON数据中的字符串要用双引号,否则会报错。而JSON数据外还需要套一个引号

我的完整代码:

__author__='hochikong'
fromflaskimportFlask,request
fromflask.ext.restfulimportResource,Api,reqparse

app=Flask(__name__)
api=Api(app)

todos={'task':'getthelistofdocker'}

parser=reqparse.RequestParser()
parser.add_argument('name',type=str,help='getthename')#因为这句话“Bydefault,theRequestParsertriestoparsevaluesfromflask.Request.values,andflask.Request.json.”,
#我们不需要在name这个参数后加‘location=json’,不过加了也无妨
parser.add_argument('auth-token',type=str,help='putthetokenhere',location='headers')


classTodoSimple(Resource):
defget(self,todo_id):
args=parser.parse_args()
ifargs['auth-token']=='thisismytoken':
return{todo_id:todos[todo_id]}
else:
return{'error':'tokenerror'},401

defput(self,todo_id):
todos[todo_id]=request.form['data']
return{todo_id:todos[todo_id]}

classGetName(Resource):
defpost(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()

启动:

pythonflaskrr.py

发送请求测试getname资源:

hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$curl-i-XPOST-H'Content-Type:application/json'-d'{"name":"hochikong"}'http://localhost:5000/getname
HTTP/1.0200OK
Content-Type:application/json
Content-Length:24
Server:Werkzeug/0.10.1Python/2.7.6
Date:Sat,11Apr201514:07:03GMT
{"yourame":"hochikong"}

hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$

发送请求测试自定义head:

hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$curl-XGET-H'auth-token:thisismytoken'http://localhost:5000/task
{"task":"getthelistofdocker"}

hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$

如果token不对:

hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$curl-XGET-H'auth-token:thisisyourtoken'http://localhost:5000/task
{"error":"tokenerror"}

hochikong@hochikong-P41T-D3:~/PycharmProjects/untitled/sora_test$

测试成功。

不过设计RESTful API最辛苦的还是设计JSON请求格式,各种功能各种格式,我也是醉了

补充:

外部可见的服务器。
运行服务器后,会发现只有你自己的电脑可以使用服务,而网络中的其他电脑却不行。 缺省设置就是这样的,因为在调试模式下该应用的用户可以执行你电脑中的任意 Python 代码。

如果你关闭了 调试 或信任你网络中的用户,那么可以让服务器被公开访问。只要像 这样改变 run() 方法的调用:

app.run(host='0.0.0.0')
这行代码告诉你的操作系统监听一个公开的 IP 。

看完上述内容,你们对restapi的设计细节和实施是什么样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恒创行业资讯频道,感谢大家的支持。

上一篇: 如何通过矩阵乘法来搞懂MapReduce 下一篇: 手机怎么远程登录云服务器?