scrapbox-api.js
Scrapbox REST APIを簡単に使えるようにするwrapper library
/icons/github.iconscrapbox-jp/scrapbox-api.js
環境
Denoとweb browserを前提に考えているが、Node.jsからも使えるようにはしたい
設計
networkとの通信
defaultでfetchを使うが、設定から変えられるようにもする
kyみたいな感じで
エラー処理
全部throwする
ちょっと迷ってきたtakker.icon
ページが存在しないとか、projectが存在しないとかは、エラーではなく引数で返したほうがいいのかなあ
そっちのほうが親切な気もする
それにエラーは想定外の事態に対して投げるべきで、それ以外のことでは投げないほうがいいはず
こっちの方針に変更した
あー、でもprojectやページの存在を別の関数で予め確認させるようにすれば、全部例外として処理しちゃっても問題なくなるのか?
Deno.mkdir()みたいな感じで
各種APIとmethodとの対応
とりあえず適当に決めてみたtakker.icon
基本方針
URL path parametersは関数の引数に入れ込む
APIの階層構造はなるべく維持する
特定のprojectに関する情報取得がpages、複数のprojectの情報取得がprojectsなのかなあ
……ということでもなさそう
pagesがページに関する情報、projectsがprojectに関する情報、といったところか?
ScrapboxのPOST系APIも含めてある
ページの情報を取得する
pages.get()
api/pages/:projectname/:pagetitle
pages.get()の実装 (scrapbox-api.js)
pages.getTableBlock()
pages.getCodeBlock()
pages.getIcon()
Blobで返す
pages.links.list()
projectの方があっていると思うのだが、URL pathに合わせておく
async generatorで実装する
api/pages/:projectname/search/titles
pages.links.replace()
api/pages/:projectname/replace/links
pageSnapshots.get()
api/page-snapshots/:projectname/:pageid
commits.get()
api/commits/:projectname/:pageid
ページ名から取得できるver.も用意しておいても良いかも
全文検索
pages.search()
api/pages/:projectname/search/query
projects.search()
api/projects/search/query
api/projects/search/watch-list
watch listかどうかは引数で区別するか
指定したprojectからなら所属しているかどうかによらずに検索するoptionをつけてもいいかも
Projectの情報を取得する
pages.list()
api/pages/:projectname
async generatorで実装する
projects.get()
projects.set()
projects.delete()
api/projects/:projectname
stream.get()
api/stream/:projectname/
projects.notifications.list()
projects.notifications.set()
projects.notifications.remove()
api/projects/:projectname/notifications
projects.invitations.get()
projects.invitations.reset()
api/projects/:projectname/invitations
projectBackup.list()
api/project-backup/:projectname/list
projectBackup.get()
api/project-backup/:projectname/:backupId.json
projects.list()
projects.create()
api/projects
importとexport
pageData.import()
scrapbox json data形式のJS objectを指定する
api/page-data/import/:projectname.json
pageData.export()
api/page-data/export/:projectname.json
Userの情報を取得する
users.get()
users.set()
api/users/me
gcs.get()
api/gcs/:projectname/usage
Node.js.icon
Deno.icon