- WebベースのAPI
- 簡単にMisskeyの機能を利用したアプリケーションを作れる
- 認証が必要なAPIは正しいApp KeyとUser Keyを要求する
- アプリケーションを登録する(App Keyの入手)
- SAuthで認証する(User Keyの入手)
- APIにアクセスする(App KeyとUser Keyを使用)
- 桶屋が儲かる
- アプリケーションを識別するための一意なキーコード
- アプリケーションを登録時に発行される
- 他の人に教えてはならない
- アプリケーションと連携したユーザーに値付けられたキーコード
- アプリケーションを利用するユーザーのパスワードみたいなもの
- 他の人に教えてはならない
- OAuthを簡略化したMisskey独自の認証方式
- App Keyとユーザーのアカウントへのアクセス許可からUser Keyを得る処理
- SAuthの認証フォームを開くのに必要なキーコード
- User Key引換券
- 直接User Keyを取得できないのはセキュリティ上の理由
- Misskey developer centerにアクセス
- ページ右上のアイコンをクリックしアプリケーション管理ページへ移動
- +アイコンをクリックし新規アプリケーション登録ページへ移動
- フォームに必要事項を記入し登録を申請
- Name
- アプリケーション名
- 投稿のviaとして表示されるやつ
- 後から変更不可
- ID
- アプリケーションID
- 一部のアプリ情報ページでURLとして表示されたりする
- 半角英数字及びハイフンが使用可能
- 後から変更不可
- Description
- アプリケーションの説明
- Callback URL
- 認証時のコールバックURL
- 作るアプリケーションがWebアプリケーションでない場合は空白のままで
- アプリケーションが無事登録されるとアプリケーション設定ページに遷移する
- 「App key」タブでApp keyが見れる
- 続けてアイコンの設定もできる
- Session keyの取得
http://api.misskey.xyz/sauth/get-authentication-session-key
にGETリクエスト- HTTPヘッダーの
sauth-app-key
にApp Keyをセット - レスポンスは
{"authenticationSessionKey": string}
の形式のJSON- authenticationSessionKeyがSession key
- HTTPヘッダーの
- 認証フォームを開いてユーザーにアカウントへのアクセス許可をもらいPINコードを取得
- 認証フォーム
http://api.misskey.xyz/authorize@(Session key)
をユーザーのブラウザで開く - 例えばSession Keyがkyoppie
ならURLはhttp://api.misskey.xyz/authorize@kyoppie
- ユーザーがアカウントへのアクセスを許可したとき- Webアプリケーションの場合はCallback URLに遷移
- GETパラメータの
pin-code
にPINコードがセットされる
- GETパラメータの
- Webアプリケーションでない場合はPINコードが表示される
- ユーザーにPINコードをアプリケーションに入力してもらう - ユーザーがアカウントのアクセスを拒否するとSession Keyは無効になる
- Webアプリケーションの場合はCallback URLに遷移
- User Keyの取得
http://api.misskey.xyz/sauth/get-user-key
にGETリクエスト- HTTPヘッダーの
sauth-app-key
にApp Keyをセット - GETパラメータの
pin-code
にPINコードをセット - GETパラメータの
authentication-session-key
にSession Keyをセット - レスポンスは
{"userKey": string}
の形式のJSON
- HTTPヘッダーの
- 各種APIの指定されたエンドポイントに指定されたHTTPメソッドでリクエスト
- 認証が必要なAPIにはHTTPヘッダに以下の情報をセット
sauth-app-key
- App Keysauth-user-key
- User Key
- エンドポイントの最後に拡張子をつけるとレスポンス形式を指定できる
- デフォルトはJSON
- 対応している拡張子は今のところ.json(JSON)と.yaml(YAML)の2つ
- 一部のAPIにはアクセス数のリミットが設定されている
- Misskeyへの過剰な負荷を防ぐため
- アクセス可能な上限とアクセス数カウントのリセット間隔はAPI毎に定められている