Drupal中的restful API介绍

如果你想为了你的站点开放一些公共的API,选用restful的方式无非是现在比较通用一种的做法。 最近我研究了下Drupal中实现了restful API规范的一个模块restws,现在拿来与大家分享下。

restws这个模块的代码及相关文档大家可以去drupal.org上找到,但是对于一个初次接触restful web servicel的朋友而言它的文档写的不是太详细,尤其是对我们国内的朋友如果需要使用它,可能会有些难度或困惑,本文的目的就是列出一些关键点,以帮助在国内推广Drupal中的这个restful API 模块.

 

基于Entity的resource

通常情况下restws要求所开放的resource是基于Entity的。 Entity是drupal中一个对于数据对象封装的一个模块,提供了CRUD操作。 对于Entity不太清楚的朋友可以去drupal.org了解下这个模块,这里不详说。下面我们举例说明一个Order对象如何开放它的restful API. 假设我们的Order对应一张数据库表order. 那么在你的module里面要做以下几点来设置Order为Entity:

  • 实现hook_entity_info定义名为Order的enity type
  • 实现hook_entity_property_info为Order定义entity properties
  • 为Order entity定义access callback(如果不定义access callback,访问api的时候会遇到403错误,个人认为这个可能是restws的一个bug,在未来版本应该被修复)

这样你的Order就成为一个entity,只要你enable restws模块,restws会通过entity_get_info去获得entity信息,然后自动构建menu path和一个基于Entity API的RestWSEntityResourceController类的对象来做CRUD操作,返回的representation可以支持xml/json,还可以自己去继承RestWSBaseFormat去实现其它的格式。 由restws生成的CRUD的URI规范如下:

     * Create: HTTP POST /<entity type name> (requires HTTP Content-Type header
       set to the MIME type of <format>)

     * Read: HTTP GET /<entity type name>/<entity id>.<format>

     * Update: HTTP PUT /<entity type name>/<entity id>.<format>
       or      HTTP PUT /<entity type name>/<entity id> (requires HTTP
       Content-Type header set to the MIME type of the posted format)


     * Delete: HTTP DELETE /<entity type name>/<entity id>

 

实现非Entity的resource

如果你想开放的resource不打算定义成Entity, 也是可以的。但必须要实现以下几点:

  • 在hook_restws_resource_info定义resouce的基本信息,其中最重要的一个是class属性,restws设计了一个接口RestWSResourceControllerInterface用来控制resouce,包括属性定义,CRUD操作
  • 新建一个类实现RestWSResourceControllerInterface。其中的wrapper方法具体实现仍然可以是使用entity_metadata_wrapper方法实现。 resource的数据结构类似entity的array结构。

注意如果已经是Entity的resource, 则不能为它绑定一个实现了RestWSResourceControllerInterface接口的类。 因为restws已经默认为Entity的resource绑定一个类。

 

API的访问授权

restws对所有的API的URI都集合了drupal的role&permission机制,你可以在Pepole的Permission页面上设置每个resouce的授权。

 

好了就谈这么多,可能还不太详细,对于create/update/delete的一些细节也没提到,暂且先抛砖引玉, 作为入门drupal reseful web service之谈吧。

转载于:https://www.cnblogs.com/JordanBlog/p/3188002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值