我正在开发一个 iOS 客户端应用程序,用于编辑 Mac OS X 服务器(Snow Leopard 和 Lion)上的内置 Wiki/博客。
看来我们可以使用MetaWeblog、Atom API(我尝试过但失败了)或XML-RPC。 但是,我找不到任何API文档。
所以我的问题是,在哪里可以找到文档或一些开源示例? 我发现的所有示例都无法处理 OS X Server。
非常感谢!
更新:
这是 Wiki 系统的标准结构:
我什至无法获取 ~/Groups/
下的“group_name”列表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" />
元素。服务器返回一个包含“成功”布尔值的 JSON 字符串。
您还可以使用 safari/chrome 的开发者工具来监控发往/来自服务器的 ajax 请求,例如这是保存 wiki 页面的 PUT 请求的 JSON 内容:
我正在开发最新的 Lion 服务器,以便通过应用程序进行访问。 Lion服务器Web服务的结构基于Ruby on Rails,并且很容易理解(我以前没有Ruby经验)。然而,整个系统(对于实现的部分)并不是为API访问而设计的。例如,身份验证系统是基于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 渲染支持,例如,
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
一件重要的事情是,lion 服务器使用 Web auth/cookie 来授权访问,因此您的请求 lib/api 必须处理 cookie。
以上是 api/json 访问的最简单解决方案,但不是最好的解决方案。你最好重新处理所有访问进度以适应api访问。
顺便说一句:您可以将整个 /usr/share/collabd/ 复制到您自己的项目目录中,然后修改所有/您的项目路径/collab/coreclient/config/collabcore{1,2,3,4}.yml,更改生产到开发。
所以你可以在 collab/coreclient 下启动开发服务器应用程序:
sudo -u _teamsserver thin start