我正在开发一个iOS客户端应用程序来编辑Mac OS X Server(Snow Leopard& Lion)上的内置Wiki / Blog。
似乎我们能够使用MetaWeblog,Atom API(我已尝试但失败)或XML-RPC。 但是,我找不到任何API文档。
所以我的问题是,我在哪里可以找到文档或一些开源示例? 我找到的所有样本都无法处理OS X Server。
非常感谢!
峰
更新
以下是Wiki系统的标准结构:
我甚至无法获得〜/ Groups /
下的'group_name'列表
答案 0 :(得分:1)
wiki的javascript源代码没有混淆,看起来很简单,可以作为文档。例如,身份验证过程:
sendAuthenticationPlain: function() {
$('webauth').addClassName('verifying').removeClassName('error');
var username = $F('username');
var password = $F('password');
var csrf = $F('authenticity_token');
var plainResponse = "username="+username+"&password="+password
this.setRememberMeCookie();
var ajaxReq = new Ajax.Request(window.location.protocol + '//' + window.location.host + "/auth/plain_login", {
method: 'post',
requestHeaders: {'X-CSRF-Token': csrf},
onComplete: this.gotAuthentication.bind(this),
postBody: plainResponse
});
return false;
},
gotAuthentication: function(origRequest) {
if (origRequest.responseJSON) {
var jsonObject = origRequest.responseJSON
if (jsonObject['success']) {
var redirect = jsonObject['redirect'];
var authToken = jsonObject['auth_token'];
this.successCallback(authToken, redirect);
} else {
var errorString = jsonObject['error_string']
this.failureCallback(errorString);
}
}
},
因此,您向auth / plain_login发送POST请求,其中仅包含POST数据中的用户名/密码和X-CSRF-Token标头,其值来自页面上的<input type="hidden" name="authenticity_token" />
元素。服务器返回包含'success'boolean。
您还可以使用safari / chrome的开发人员工具来监控进出服务器的ajax请求,例如,这是保存Wiki页面的PUT请求的JSON内容:
答案 1 :(得分:1)
我正在使用最新的Lion服务器,通过应用程序进行访问。 Lion服务器Web服务的结构基于ruby on rails,易于理解(之前我没有ruby经验)。但是,整个系统(对于已实现的部分)不是为API访问而设计的。例如,auth系统基于Cookie身份验证(会话ID或其他内容)。并非请求的所有输出都有json响应。没有任何关于json正文的失败请求响应。
所有工作都需要由你自己完成。
第一种是对服务器进行身份验证。所有的过程都暴露给你:
'wiki/api/csrf' to get the X-CSRF-Token value
'auth/challenge_advanced?username=xxxx' to get a challenge parameters
'auth/digest_login' to use md5-sess digest to login
虽然,md5-sess摘要是由你自己的代码在digest.js之后计算的(对我来说是objective-c,有CC_md5 lib)
然后你可以为你需要的控制器添加json render支持,例如,
respond_to do |format|
format.html
format.js { render_js_pagination_response(@search, 'people/entitylist_item') }
format.json { #new added json support
rs = []
@search.results.each do |r|
nr = filterUserInfo r # I only need some of the all properties
rs.push nr
end
render :json => rs
}
end
重要的是,狮子服务器使用web auth / cookie来授权访问,因此你的请求lib / api必须处理cookie。
以上是api / json访问的最简单的解决方案,但不是最好的解决方案。你最好重新处理所有访问进度以适应api访问。
顺便说一句:你可以将整个/ usr / share / collab / /复制到你自己项目的目录中,然后修改所有/你的项目路径/ collab / coreclient / config / collabcore {1,2,3,4} .yml,将生产转变为发展。所以你可以在collab / coreclient下启动一个开发服务器应用程序:
sudo -u _teamsserver thin start
访问服务器