Discuz!NT

注册

 

QQ登录

只需一步,快速开始

发新话题 回复该主题

[文档] API - REST-like Web Service [复制链接]

1#
概述

Discuz!NT API是Discuz!NT 论坛产品开放的论坛数据接口,开发者可通过API访问论坛的数据资源,为应用程序(包括其他web系统或者客户端应用程序)和论坛之间开启一条方便快捷安全的数据交互通道。是论坛和应用程序完美整合的最简单最快捷的方案。
与以往的整合方式不同,使用API的开发者无需修改论坛产品的任何代码,论坛升级将不会影响应用程序的代码设计,论坛升级毫无后顾之忧。
Discuz!NT API同样可以使Discuz!NT 论坛成为站长的站群数据中心,依托论坛完善的会员管理机制和论坛本身对吸引最新内容的优势,应用程序可以通过API,最大限度的利用论坛数据,打造一个用户粘度强,内容利用多,应用丰富且关联性强的web群。

技术说明

Discuz!NT API 是类似于REST(Representational State Transfer) 架构的Web Service,基于HTTP协议,支持POST,GET请求方法,返回数据格式分为XML(default)和JSON两种。
Discuz!NT API的请求地址为http://[论坛URL]/services/restserver.aspx
下面是一个请求方法users.getLoggedInUser的真实的请求例子:
    http://localhost/services/restserver.aspx?sig=155783e3fd0ab00128f42ed8f81766d2&api_key=22aab29507fedd920b5f977c48da35&call_id=634435577851672720&format=xml&method=users.getLoggedInUser&session_key=4bf5702c9d9628c80e3b4eae916b0fb5-1

访问API需要应用程序提供api_key和当前请求上下文的签名sig,大部分API方法还需要应用程序提供CallId以验证当前请求是否已经过期。开发者在访问API之前,需要进入“论坛后台-扩展-整合设置-通行证设置“页面添加整合程序,如果论坛未启用整合程序,也需要在此处开启。


    应用程序名称:应用程序在论坛当中的命名
    应用程序类型:应用程序是web站点或者是终端程序,不同的设置会在访问API时有所不同
    应用程序Url地址:应用程序的Url,桌面程序不填写
    登录完成的返回地址(Callback URL):应用程序在跳转到登录页面获取authToken或跳转到status页面获取用户登录状态时的回调地址,该地址其实是web应用程序用以接受GET返回的auth_token或user_status值的页面地址
    同步数据模式:设置论坛向应用程序推送事件信息的设置。开启则推送论坛支持的所有事件类型,自定义则推送开发者指定的事件类型
    同步数据的URL地址:应用程序接收论坛推送事件消息的url地址
    同步数据的事件列表:自定义推送的事件类型列表(详细链接)
    关于同步数据相关的功能,有专门的文档说明,此处不做详细说明

1.应用程序如何获得当前用户的登录状态
首先应用程序需要跳转(Redirect)到论坛login.aspx?api_key=[you api key]地址(DiscuzToolkit可直接调用方法CreateToken()直接获得跳转链接)。若当前用户已经登录,则不做停留直接跳回到Callback Url地址,否则会停留在论坛登录界面要求用户登录,登录成功后再跳回Callback Url地址;跳回Callback Url地址时,会加上auth_token的参数和值,应用程序获得auth_token之后,使用auth_token访问API方法 auth.getSession 会得到当前用户的会话状态sessionKey。
sessionkey作为应用程序持有的当前登录用户安全身份标识,具有表示当前登录用户身份的用途,若应用程序为客户端应用程序,则在访问API时必须提供该参数(详细说明看各个方法的调用说明)
2.应用程序如何知道当前用户是否登录
如果应用程序不希望在获取authToken时因为当前用户未登录而停留在论坛登录页面登录,则可以通过访问论坛/services/status.aspx?api_key=[you api key](DiscuzToolkit可直接调用方法GetStatus()获得跳转链接,该方法为3.7版DiscuzToolkit新方法)。该地址会直接调回Callback Url地址,并传递参数user_status,若user_status=1,则当前已经有用户登录,可执行获取用户登录状态的操作等,否则user_status=0

名词解释

应用程序:指访问API接口的任何计算机程序,包括其他的web站点,或者终端应用程序。
authToken:当用户在论坛登录成功之后,由论坛通过GET形式返回到web应用程序的令牌,表示当前用户已经登录,应用程序可通过该令牌获取sessionKey。
sessionKey:当前登录用户的会话状态,是当前登录用户的安全身份标识。

REST 接口

API使用 REST 形式的接口。
这就意味着Discuz!NT API方法可以用HTTP GET 或 POST方式来调用,几乎每一种计算机语言都可以通过HTTP来与REST服务器进行通讯。
REST Server的地址是 [论坛地址/services/restserver.aspx]

API 方法


  • 通用参数在调用所有的API接口时都必须或者可选择提供的参数

auth.createToken (3.0版本开始支持)
为客户端程序获取Token.

auth.getSession  
通过Callback链接里的auth_token参数返回对应当前用户的Session Key.

auth.register
注册用户.

auth.encodePassword
获得加密密码,原始密码或者MD5后的密码再次加密用于身份验证.

forums.create  
创建版块.

forums.get  
获取版块信息.

forums.getIndexList (3.0版本开始支持)
获取版块列表.

messages.get (3.0版本开始支持)
获取消息列表.

messages.send (3.0版本开始支持)
站内短消息发送.

notifications.get  
返回当前登录用户的消息状况.

notifications.send  
对一组用户发送通知.

notifications.sendEmail  
对指定用户发送Email.

users.getInfo  
返回一组用户的资料信息,会根据当前登录用户显示内容有所限制.

users.getInfoByEmail  
返回指定Email用户的资料信息,会根据当前登录用户显示内容有所限制.

users.setInfo  
设置指定用户信息.

users.getID  
根据用户名获得user ID (uid).

users.getLoggedInUser  
获得当前登录的user ID (uid).

users.setExtCredits (3.0版本做了修改,除客户端外不需要验证session_key,并增加了批量操作)
设置用户指定扩展积分加减.

users.changePassword (3.0版本开始支持)
修改用户密码.

topics.create  
发表主题.

topics.get (3.0版本开始支持)
获取指定主题内容.

topics.reply  
发表回复.

topics.getRecentReplies  
获取最新回复.

topics.getList (3.0版本开始支持)
获取指定版块主题列表.

topics.getAttentionList (3.0版本开始支持)
获取指定版块需要管理人员关注的主题列表.

topics.delete (3.0版本开始支持)
删除指定主题.

topics.edit (3.0版本开始支持)
编辑指定主题.

topics.deleteReplies (3.0版本开始支持)
批量删除回复.


附加文档
最后编辑scorpion 最后编辑于 2011-07-25 17:25:02
分享 转发
TOP
2#

沙发啊~~~
楼主,怎么调用.你发的 测试控件台是错的~~能给个正确的全教程么?
TOP
3#

回复 [url=http://nt.discuz.net/showtopic.aspx?topicid=142962&postid=6632#6632]2楼吴存平的帖子[/url]

测试控制台没有错。应该是你的url写错了。教程上的url你不能照搬,你要改成http://你的论坛的网址(如http://www.baidu.com/bbs),这样你再运行就不会出错了。
TOP
4#

难以理解的语言,。。。。图片也很乱
应用程序URL地址是什么?无解释
登录后返回地址又是什么。
同步数据模式又是什么。
这些都是神马?神马?神马啊?
TOP
5#

找回密码的时候 用户密码没有同步呀~~ 解决下
TOP
6#

怎么扩展广告位?增加广告内型
有没有API可以直接获取到广告列表
TOP
7#

学习啦!!
TOP
8#

请问sig  call_id 怎么获取呢、
TOP
9#

非常好的帖子!
TOP
发新话题 回复该主题
站长