• Flask restful_api服务器端


    使用python的Flask实现一个RESTful API服务器端

    最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了。

    本文将会使用python的Flask框架轻松实现一个RESTful的服务。

    REST的六个特性:

    • Client-Server:服务器端与客户端分离。
    • Stateless(无状态):每次客户端请求必需包含完整的信息,换句话说,每一次请求都是独立的。
    • Cacheable(可缓存):服务器端必需指定哪些请求是可以缓存的。
    • Layered System(分层结构):服务器端与客户端通讯必需标准化,服务器的变更并不会影响客户端。
    • Uniform Interface(统一接口):客户端与服务器端的通讯方法必需是统一的。
    • Code on demand(按需执行代码?):服务器端可以在上下文中执行代码或者脚本?

    Servers can provide executable code or scripts for clients to execute in their context. This constraint is the only one that is optional.(没看明白)

    RESTful web service的样子

    REST架构就是为了HTTP协议设计的。RESTful web services的核心概念是管理资源。资源是由URIs来表示,客户端使用HTTP当中的'POST, OPTIONS, GET, PUT, DELETE'等方法发送请求到服务器,改变相应的资源状态。

    HTTP请求方法通常也十分合适去描述操作资源的动作:

    HTTP方法 动作 例子
    GET 获取资源信息

    http://example.com/api/orders

    (检索订单清单)

    GET 获取资源信息

    http://example.com/api/orders/123

    (检索订单 #123)

    POST 创建一个次的资源

    http://example.com/api/orders

    (使用带数据的请求,创建一个新的订单)

    PUT 更新一个资源

    http://example.com/api/orders/123

    (使用带数据的请求,更新#123订单)

    DELETE 删除一个资源

    http://example.com/api/orders/123

    删除订单#123

    REST请求并不需要特定的数据格式,通常使用JSON作为请求体,或者URL的查询参数的一部份。

    设计一个简单的web service

    下面的任务将会练习设计以REST准则为指引,通过不同的请求方法操作资源,标识资源的例子。

    我们将写一个To Do List 应用,并且设计一个web service。第一步,规划一个根URL,例如:

    http://[hostname]/todo/api/v1.0/

    上面的URL包括了应用程序的名称、API版本,这是十分有用的,既提供了命名空间的划分,同时又与其它系统区分开来。版本号在升级新特性时十分有用,当一个新功能特性增加在新版本下面时,并不影响旧版本。

    第二步,规划资源的URL,这个例子十分简单,只有任务清单。

    规划如下:

    HTTP方法 URI 动作
    GET http://[hostname]/vhoneypot/v1/policy 检索任务清单
    GET http://[hostname]/vhoneypot/v1/policy/<uuid> 检索一个任务
    POST http://[hostname]/vhoneypot/v1/policy/<uuid> 创建一个新任务
    PUT http://[hostname]/vhoneypot/v1/policy/<uuid> 更新一个已存在的任务
    DELETE http://[hostname]/vhoneypot/v1/policy2/<id> 删除一个任务

    我们定义任务清单有以下字段:

    • id:唯一标识。整型。
    • title:简短的任务描述。字符串型。
    • description:完整的任务描述。文本型。
    • done:任务完成状态。布尔值型。

    以上基本完成了设计部份,接下来我们将会实现它!

    from flask import Flask
    from flask_restful import Api
    
    app = Flask(__name__)
    app.config.update(RESTFUL_JSON=dict(ensure_ascii=False))
    api = Api(app)
    
    from IPolicy import IPolicyList, IPolicy, IPolicy2List, IPolicy2
    api.add_resource(IPolicyList, '/vhoneypot/v1/policy')
    api.add_resource(IPolicy, '/vhoneypot/v1/policy/<uuid>')
    api.add_resource(IPolicy2List, '/vhoneypot/v1/policy2')
    api.add_resource(IPolicy2, '/vhoneypot/v1/policy2/<id>')
    
    def main(argv):
       
        app.run(host=, port=, debug=)
    View Code

    然后是接口函数

     1 class IPolicyList(HIHTTP.Resource):
     2     # 获取历史策略信息和详情数据或者满足条件的数据
     3     def get(self):
     4         pass
     5   
     6 
     7 
     8 class IPolicy(HIHTTP.Resource):
     9     def get(self, uuid):
    10         pass
    11       
    12 
    13 
    14 class IPolicy2List(HIHTTP.Resource):
    15     def get(self):
    16         pass
    17    
    18     def post(self):
    19         pass
    20       
    21 
    22 class IPolicy2(HIHTTP.Resource):
    23 
    24     
    25     def put(self, id):
    26         pass
    27               
    28 
    29     def delete(self, id):
    30         pass
    31    
    View Code
    大概就是这个样子。初学还求各位大神指点
  • 相关阅读:
    获取并设置ListView高度的方法
    Android的webview加载本地html、本apk内html和远程URL
    Android
    jQuery通知插件noty
    腾讯地图之Marker
    星星打分
    eval以及json
    PHP json_encode
    javascript 检测密码强度 美化版
    javascript 检测密码强度
  • 原文地址:https://www.cnblogs.com/nanyu/p/9661801.html
Copyright © 2020-2023  润新知