zoukankan      html  css  js  c++  java
  • pigeon物联网平台- developer portal web服务设计及实现

    pigeon是在之前的工作基础上,进行反思,并且学习参考了目前的物联网平台,像最近出现的amazon aws iot, samsung sami等等,初步构想出的一个大体轮廓的open source IoT Cloud platform,后面我会专门写一篇来详细介绍下我构思的IoT平台pigeon,现在我先介绍下developer portal。
     
    developer portal背景,业务介绍
    它是pigeon的其中一个服务,功能在于提供给设备开发者来将他们开发的设备注册到pigeon平台,具体地说,就是把他们设备的元信息,保存到pigeon,这个服务的目的在于给用户的控制设备请求和gateway(及具体devices接收指令进行自动操作)之间制定了通信规范,以及gateway的设备插件仓库(比如用户购买了camera设备,该款camera 在pigeon平台已注册,用户在user portal上搜索下载该camera插件到gateway, 这样就可以打通了
     pigeon平台, gateway(agent), camera之间的通道,用户可以进行操控camera)
     
    一个在pigeon保存的新添加的设备类型,包括两个部分:设备信息和设备属性元数据。
    其中设备信息包含设备类型在pigeon平台唯一性的devtype, 该款设备的制造商manufacturer,版本信息version, 该款设备的用途和功能描述description;
    而设备属性元数据meta:则是该类型设备的功能抽象,如灯light,它有属性power,值为on/off,  colors属性,那么我们可以把light的meta简单抽象为
    {"power":"boolean", "color":"int"}.以后对于light设备的控制操作,用户可以简单的通过get/set这两个属性请求来达到目的(当用户发送的控制请求到达pigeon云平台后,pigeon的内部服务可以检查该请求是否符合该设备类型存储在平台上的meta信息,若符合才发送给用户的gateway)
     
    developer portal的设计和实现

    以前习惯了用C/C++开发,花几天学习了html, javascript, nodejs, express, 才知道神马开发效率,这也是java, 和众多脚本语言大行其道的原因,在移动互联网时代,所谓的小步快跑,快速迭代,更是利器,当然C/C++在底层,和性能要求高的领域还是有其优势。采用了nodejs的express框架来实现,使用redis来存储,久闻大名,初次使用后的较深体会是由于keys的o(n)时间复杂度,需要自己创建索引,还有就是需要自己来做语义上的事务处理。

    开发者账号信息及设备信息的redis存储模型设计

    developer portal 创建和管理设备的接口
    developer portal提供了REST APIs用来创建和管理设备,具体步骤如下:
    1. 首先到developer portal注册开发者账号(sign up),然后在用户settings里面获取App Key, 后续的创建管理请求都要使用这个key做认证(在http 请求包添加自定义header: apikey,值为App Key)。
    2. 使用postman发送http请求包做测试。
     
     
     
    3.可以在devices里面看到自己创建的设备类型列表信息。
     
     
    创建和管理设备类型的REST API列表(下面是基本的接口,后续还需要增加api来更完整,方便管理设备类型):
    -----------------------------------------------------------------------------------------------------------------
    1. 创建设备类型
    post  /v0.1/iot/devices
     
    请求格式:json, 
    eg: {"devtype":"q46", "manufacturer":"euputddfds", "version":"0.0.1", "description":"hi, eu"}
    响应:
    创建成功,返回状态码201
    -----------------------------------------------------------------------------------------------------------------
    2.查询指定设备类型信息
    get /v0.1/iot/devices/<devtype>
     
    响应格式:json
    eg:{"manufacturer": null,  "version": "0.0.1",  "description": "hi, eu,new version come on now! "}
    -----------------------------------------------------------------------------------------------------------------
    3.获取自己创建的设备类型名列表
    get  /v0.1/iot/devices
     
    响应格式:json
    eg: [ "q56",  "q66",  "q46",  "q36",  "q6"]
    -----------------------------------------------------------------------------------------------------------------
    4.修改指定设备类型信息
    put  /v0.1/iot/devices/<devtype>
     
    请求格式: json,
    eg: {"manufacturer":"euputddfds", "version":"0.0.1", "description":"hi, eu"}
    响应:
    创建成功,返回状态码200
    -----------------------------------------------------------------------------------------------------------------
     
    5.创建指定设备类型的元数据信息
    post /v0.1/iot/devices/<devtype>/meta
     
     
    请求格式:json
    eg:{"id":"string", "pos":"float"}
    (设备类型q36的设备属性有两个字段id为string类型,pos为float类型)
    响应:
    创建成功,返回状态码201
    -----------------------------------------------------------------------------------------------------------------
    6. 修改指定设备类型的元数据信息
    put /v0.1/iot/devices/<devtype>/meta
     
     
    请求格式:json
    eg:{"pos":"int"}
    (设备类型q36的设备属性pos为int类型)
    响应:
    创建成功,返回状态码200
    -----------------------------------------------------------------------------------------------------------------
     
    7. 查询指定设备类型的元数据信息
    get /v0.1/iot/devices/<devtype>/meta
     
     
    响应格式:json
    eg: {"id": "int",  "pos": "float"}
    -----------------------------------------------------------------------------------------------------------------
    8. 删除指定设备类型的元数据信息
    delete /v0.1/iot/devices/<devtype>/meta
     
    响应:
    删除成功,返回状态码200
    -----------------------------------------------------------------------------------------------------------------
    9.删除指定设备类型(它将删除所有关于指定设备类型的信息,包括meta)
    delete /v0.1/iot/devices/<devtype>
     
     
    响应:
    删除成功,返回状态码200
    -----------------------------------------------------------------------------------------------------------------
     
    目前只是初步的实现,还有很多细节需要考虑,迭代,如设备类型信息目前仅devtype,manufacturer,version,description
    四个字段,以及设备类型的属性元信息meta设计目前没有涉及具体的规范,仅以fieldname:type来设置,将来考虑将其修改成
    形如{'properties':{fieldname:type, fieldname:type}, 'action':{...}}.
    (即我在另外一篇文章物联网command原型设计提到的,同时支持属性设置和动作操作,同时可以参考https://developer.samsungsami.io/sami/api-spec.html)
     
    可以在https://github.com/europelee/pigeon 看下提交的developer portal代码,欢迎交流!
  • 相关阅读:
    Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序
    Educational Codeforces Round 60 D dp + 矩阵快速幂
    Educational Codeforces Round 60 C 思维 + 二分
    Codeforces Round #544 (Div. 3) dp + 双指针
    Codeforces Round #542(Div. 2) CDE 思维场
    UVA
    UVA
    UVA
    UVA
    UVA
  • 原文地址:https://www.cnblogs.com/europelee/p/4991495.html
Copyright © 2011-2022 走看看