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

99次阅读
没有评论

共计 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 行业资讯频道,感谢大家的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3223字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)