资源分享WebAPP的API应该如何设计?

设计一个资源分享应用。设计RESTful API时,在设计层面有些蒙圈了。特地求教各位。

物联网设备通过设备云服务抽象成一个设备API。而我目前设计的Web APP则是通过与应用业务的整合,将设备API封装后,再次封发给第三方APP(比如其他合作平台)和移动APP。

    DeviceAPI --> WebAPI -?-> Cloud|APK|APP

我现在有两种选择:

第一种来自Flask/Flask-RESTful的API设计,采用JSON格式。先采用API Key/Secret登陆,换取token,然后在后续访问中采用token来访问,也可以利用API Key/Secret继续访问。这是最常见的经典方式。典型的URL风格是:

http://host/api/version/resource/idx/

第二种来自Flask-appbuilder自带的资源驱动的REST API,采用JSON格式。但是其鉴权方式采用经典的username/password。换而言之,移动APP事实上是作为浏览器的替代物而存在的。唯一区别在于返回值采用JSON替代了XHTML。典型URL风格是:

http://host/resource/api/idx

有些怪异,是吧?但URI字段顺序并不是最重要的,我发现移动APP和第三方APP的需求是有差异的。

作为用户,使用移动APP列出自己名下的设备列表,并通过设备ID来访问特定设备的状态读取和指令下发。所以这种方式更加适合第二种方式。

作为合作方网站,需要访问的范围可能更加广,虽然不能够指令下发,但是读取特定设备的状态也涉及到隐私权。这个似乎更加适合第一种方式。

必须依赖设备ID访问特定设备,不同的用户,不同的第三方平台都需要单独的设备密钥。这两种方式是否可以整合?

这个问题比较宽泛,欢迎指教和讨论。

回答:

我对你具体业务这一块不是很了解啊。不过看你上面的问题,url是怎么样的并不是那么重要,restful其实除了json,还有xml,form,url query等多种方式,flask-restful都是支持的。剩下主要问题就是鉴权方式,原理都差不多,无非是传输或存放的地方不一样,可以是:session,cookie,url params,http header等等。

回答:

我发现flask-appbuilder的API URL其实是由sqlalchemy导出的,专为其后台网页的AJAX目的而设计。所以不完全符合RESTFul的架构。而flask-restful则是根据RESTFul而设计导出的,其路径可以有用户自定义。

一般来说,针对Web、Mobile、前端的API,还是有所差异的。差异在于Web是固定IP的,而Mobile和浏览器前端IP不定,甚至是隐藏IP。这导致三者间锁定和鉴权方式不一致。Web锁定domain/IP,浏览器锁定Referrer,Mobile无法锁定。此外,对于apiKey/apiSecret/nouce/signature/TLS,以及登陆用户的username/password等信息都通过session/cookie进行保存。

以上是 资源分享WebAPP的API应该如何设计? 的全部内容, 来源链接: utcz.com/qa/257087.html

回到顶部