標高+1m

Don't be rational

manualhubの公開API

pasberthさんからリクエストがあったので書きますね。
manualhubのAPIです。
内部利用を想定したものにAccess-Control-Allow-Origin *を追加しただけなので(OPTIONSにも対応してるはず)、APIの仕様としてはあんまりクールじゃないと思いますが、時間ないのでしばらくはこれでおなしゃす。

レスポンスはすべてJSONです。

認証

GET /auth/github?redirect_uri=http://yoursite
ここにユーザをリダイレクトしてください。
githubのログイン画面にプロンプトされたのちにセッションに認証情報が格納されてredirect_uriに戻ります。
ユーザが始めてログインする場合は、この時点でドキュメントがDBにセーブされるので、今後はそれをupdateする形になります。

ユーザのドキュメントの取得

GET /user/:name
:nameはgithubのユーザネームを指定してください。
DBから出てきたJSONをそのまま返します。
必ず一件なので、配列でくるんでいません。
{name : ..., synopsis : ..., misc : ...}
ユーザが存在しない場合は
{error : 'user hoge does not exist'}

アップデート

PUT /user
PUTメソッドでアップデートします。リクエストのbodyには{changeSet : {field1 : value1, field2 : value2}}という形式のデータをx-www-form-urlencoded形式で格納してください。jQueryの$.ajaxを使うとJSONを渡せばおっけーなので楽ちんです。
成功したら{success : 1}が返ります

新着

GET /recent
最新20件のドキュメントが配列に格納されて返ります。

認証済みユーザの名前の取得

GET /whoami

ドキュメントは以下のフィールドを持ちます

  {
    name : String,
    occupation : String,
    synopsis : String,
    avatar_url : String,
    description : String,
    misc : String,
    see_also : String
  }

簡単なバリデーションしかしていないので、xssに使われる文字列が含まれていないことをAPIは保証しません。
それぞれフィールドには、troffのサブセットの形式で文字列が格納されています。
manualhubのweb UIがサポートするものは以下のとおり

.B 太字になります
.I 強調表示(斜体)になります
.SH セクションのヘッダです。
.PP セクション内での改行
.br セクション巻の改行

.SH.B 例を
示します
.PP
.I super 
.I pre
記法ってすごいね

セパレータはスペースを使用しています。


とりあえずこんな感じ。
いまからお仕事に行ってきます

追記

存在しないユーザ名を指定したときにサーバが落ちちゃうバグ直しました

今日Access-Contorol-Originヘッダを追加したときに、何も考えずにただres.writeHeadしたんですよ。
そしたらそのあとにres.sendしてるところがあって、ヘッダはもう送られてますみたいなエラーがでてこけちゃうようになっちゃってました。
昼頃気づいて,res.sendをres.endにかえて回避しておきました。

追記2
Content-Lengthヘッダを忘れてたので付けました。String.lengthでとってるのでマルチバイトがくると死にます。あとで直します