mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-12-24 22:23:08 +02:00
API doc
This commit is contained in:
parent
5f5156561f
commit
be52eb9b3f
6 changed files with 97 additions and 10 deletions
77
src/docs/api.ja.md
Normal file
77
src/docs/api.ja.md
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
# Misskey API
|
||||||
|
|
||||||
|
MisskeyのWeb APIを使って、プログラムからMisskeyの様々な機能にアクセスすることができます。
|
||||||
|
APIを自分のアカウントから利用する場合(自分のアカウントのみ操作したい場合)と、アプリケーションから利用する場合(不特定のアカウントを操作したい場合)とで利用手順が異なりますので、それぞれのケースについて説明します。
|
||||||
|
|
||||||
|
## 自分の所有するアカウントからAPIにアクセスする場合
|
||||||
|
「設定 > API」で、APIにアクセスするのに必要なAPIキーを取得してください。
|
||||||
|
APIにアクセスする際には、リクエストにAPIキーを「i」というパラメータ名で含めます。
|
||||||
|
|
||||||
|
<div class="ui info warn">
|
||||||
|
<p><i class="fas fa-exclamation-triangle"></i> アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
APIの詳しい使用法は「Misskey APIの利用」セクションをご覧ください。
|
||||||
|
|
||||||
|
## アプリケーションからAPIにアクセスする場合
|
||||||
|
直接ユーザーのAPIキーをアプリケーションが扱うのは危険なので、
|
||||||
|
アプリケーションからAPIを利用する際には、アプリケーションとアプリケーションを利用するユーザーが結び付けられた専用のトークン(アクセストークン)をMisskeyに発行してもらい、
|
||||||
|
そのトークンをリクエストのパラメータに含める必要があります。
|
||||||
|
|
||||||
|
<div class="ui info">
|
||||||
|
<p><i class="fas fa-info-circle"></i> アクセストークンは、ユーザーが自分のアカウントにあなたのアプリケーションがアクセスすることを許可した場合のみ発行されます</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
### 1.アプリケーションを登録する
|
||||||
|
まず、あなたのアプリケーションやWebサービス(以後、あなたのアプリと呼びます)をMisskeyに登録します。
|
||||||
|
[デベロッパーセンター](/dev)にアクセスし、「アプリ > アプリ作成」からアプリを作成してください。
|
||||||
|
フォームの記入欄の説明は以下の通りです:
|
||||||
|
|
||||||
|
| 名前 | 説明 |
|
||||||
|
|---|---|
|
||||||
|
| アプリケーション名 | あなたのアプリの名称。 |
|
||||||
|
| アプリの概要 | あなたのアプリの簡単な説明や紹介。 |
|
||||||
|
| コールバックURL | ユーザーが後述する認証フォームで認証を終えた際にリダイレクトするURLを設定できます。あなたのアプリがWebサービスである場合に有用です。 |
|
||||||
|
| 権限 | あなたのアプリが要求する権限。ここで要求した機能だけがAPIからアクセスできます。 |
|
||||||
|
|
||||||
|
登録が済むとあなたのアプリのシークレットキーが入手できます。このシークレットキーは後で使用します。
|
||||||
|
|
||||||
|
<div class="ui info warn">
|
||||||
|
<p><i class="fas fa-exclamation-triangle"></i> アプリに成りすまされる可能性があるため、極力このシークレットキーは公開しないようにしてください。</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
### 2.ユーザーに認証させる
|
||||||
|
アプリを使ってもらうには、ユーザーにアカウントへのアクセスの許可をもらう必要があります。
|
||||||
|
|
||||||
|
認証セッションを開始するには、%API_URL%/auth/session/generate へパラメータに appSecret としてシークレットキーを含めたリクエストを送信します。
|
||||||
|
リクエスト形式はJSONで、メソッドはPOSTです。
|
||||||
|
レスポンスとして認証セッションのトークンや認証フォームのURLが取得できるので、認証フォームのURLをブラウザで表示し、ユーザーにフォームを提示してください。
|
||||||
|
|
||||||
|
あなたのアプリがコールバックURLを設定している場合、
|
||||||
|
ユーザーがあなたのアプリの連携を許可すると設定しているコールバックURLに token という名前でセッションのトークンが含まれたクエリを付けてリダイレクトします。
|
||||||
|
|
||||||
|
あなたのアプリがコールバックURLを設定していない場合、ユーザーがあなたのアプリの連携を許可したことを(何らかの方法で(たとえばボタンを押させるなど))確認出来るようにしてください。
|
||||||
|
|
||||||
|
### 3.ユーザーのアクセストークンを取得する
|
||||||
|
ユーザーが連携を許可したら、%URL%/auth/session/userkey へ次のパラメータを含むリクエストを送信します:
|
||||||
|
|
||||||
|
| 名前 | 型 | 説明 |
|
||||||
|
|---|---|---|
|
||||||
|
| appSecret | string | アプリのシークレットキー |
|
||||||
|
| token | string | セッションのトークン |
|
||||||
|
|
||||||
|
上手くいけば、認証したユーザーのアクセストークンがレスポンスとして取得できます。おめでとうございます!
|
||||||
|
|
||||||
|
アクセストークンが取得できたら、「ユーザーのアクセストークン+あなたのアプリのシークレットキーをsha256したもの」を「i」というパラメータでリクエストに含めると、APIにアクセスすることができます。
|
||||||
|
|
||||||
|
「i」パラメータの生成方法を擬似コードで表すと次のようになります:
|
||||||
|
<pre><code>const i = sha256(accessToken + secretKey);</code></pre>
|
||||||
|
|
||||||
|
APIの詳しい使用法は「Misskey APIの利用」セクションをご覧ください。
|
||||||
|
|
||||||
|
## Misskey APIの利用
|
||||||
|
APIはすべてリクエストのパラメータ・レスポンスともにJSON形式です。また、すべてのエンドポイントはPOSTメソッドのみ受け付けます。
|
||||||
|
APIリファレンスもご確認ください。
|
||||||
|
|
||||||
|
### レートリミット
|
||||||
|
Misskey APIにはレートリミットがあり、短時間のうちに多数のリクエストを送信すると、一定時間APIを利用することができなくなることがあります。
|
|
@ -1,4 +1,4 @@
|
||||||
extends ../../layout.pug
|
extends ../../base
|
||||||
include ../mixins
|
include ../mixins
|
||||||
|
|
||||||
block meta
|
block meta
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
extends ../../layout.pug
|
extends ../../base
|
||||||
include ../mixins
|
include ../mixins
|
||||||
|
|
||||||
block meta
|
block meta
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
extends ./layout.pug
|
extends ./base
|
||||||
|
|
||||||
block main
|
block main
|
||||||
!= html
|
!= html
|
||||||
|
|
|
@ -7,11 +7,9 @@ html(lang= lang)
|
||||||
title
|
title
|
||||||
| #{title} | Misskey Docs
|
| #{title} | Misskey Docs
|
||||||
link(rel="stylesheet" href="/docs/assets/style.css")
|
link(rel="stylesheet" href="/docs/assets/style.css")
|
||||||
|
link(rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous")
|
||||||
block meta
|
block meta
|
||||||
|
|
||||||
//- FontAwesome style
|
|
||||||
style #{facss}
|
|
||||||
|
|
||||||
body
|
body
|
||||||
nav
|
nav
|
||||||
ul
|
ul
|
|
@ -13,7 +13,6 @@ import * as glob from 'glob';
|
||||||
import * as yaml from 'js-yaml';
|
import * as yaml from 'js-yaml';
|
||||||
import config from '../../config';
|
import config from '../../config';
|
||||||
import I18n from '../../misc/i18n';
|
import I18n from '../../misc/i18n';
|
||||||
import { fa } from '../../misc/fa';
|
|
||||||
import { licenseHtml } from '../../misc/license';
|
import { licenseHtml } from '../../misc/license';
|
||||||
const constants = require('../../const.json');
|
const constants = require('../../const.json');
|
||||||
|
|
||||||
|
@ -50,8 +49,6 @@ async function genVars(lang: string): Promise<{ [key: string]: any }> {
|
||||||
|
|
||||||
vars['copyright'] = constants.copyright;
|
vars['copyright'] = constants.copyright;
|
||||||
|
|
||||||
vars['facss'] = fa.dom.css();
|
|
||||||
|
|
||||||
vars['license'] = licenseHtml;
|
vars['license'] = licenseHtml;
|
||||||
|
|
||||||
const i18n = new I18n(lang);
|
const i18n = new I18n(lang);
|
||||||
|
@ -207,7 +204,22 @@ router.get('/*/*', async ctx => {
|
||||||
const lang = ctx.params[0];
|
const lang = ctx.params[0];
|
||||||
const doc = ctx.params[1];
|
const doc = ctx.params[1];
|
||||||
|
|
||||||
const conv = new showdown.Converter();
|
showdown.extension('urlExtension', () => ({
|
||||||
|
type: 'output',
|
||||||
|
regex: /%URL%/g,
|
||||||
|
replace: config.url
|
||||||
|
}));
|
||||||
|
|
||||||
|
showdown.extension('apiUrlExtension', () => ({
|
||||||
|
type: 'output',
|
||||||
|
regex: /%API_URL%/g,
|
||||||
|
replace: config.api_url
|
||||||
|
}));
|
||||||
|
|
||||||
|
const conv = new showdown.Converter({
|
||||||
|
tables: true,
|
||||||
|
extensions: ['urlExtension', 'apiUrlExtension']
|
||||||
|
});
|
||||||
const md = fs.readFileSync(`${__dirname}/../../../src/docs/${doc}.${lang}.md`, 'utf8');
|
const md = fs.readFileSync(`${__dirname}/../../../src/docs/${doc}.${lang}.md`, 'utf8');
|
||||||
|
|
||||||
await ctx.render('../../../../src/docs/article', Object.assign({
|
await ctx.render('../../../../src/docs/article', Object.assign({
|
||||||
|
|
Loading…
Reference in a new issue