Improve doc
This commit is contained in:
parent
47d4dcfdf5
commit
60c9a6528f
|
@ -7,6 +7,7 @@ export type Param = {
|
||||||
validator: Context<any>;
|
validator: Context<any>;
|
||||||
transform?: any;
|
transform?: any;
|
||||||
default?: any;
|
default?: any;
|
||||||
|
deprecated?: boolean;
|
||||||
desc?: { [key: string]: string };
|
desc?: { [key: string]: string };
|
||||||
ref?: string;
|
ref?: string;
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,6 +21,20 @@ export const meta = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
token: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'セッションのトークン'
|
||||||
|
},
|
||||||
|
url: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'セッションのURL'
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchApp: {
|
noSuchApp: {
|
||||||
message: 'No such app.',
|
message: 'No such app.',
|
||||||
|
|
|
@ -29,6 +29,21 @@ export const meta = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
res: {
|
||||||
|
type: 'object',
|
||||||
|
properties: {
|
||||||
|
accessToken: {
|
||||||
|
type: 'string',
|
||||||
|
description: 'ユーザーのアクセストークン',
|
||||||
|
},
|
||||||
|
|
||||||
|
user: {
|
||||||
|
type: 'User',
|
||||||
|
description: '認証したユーザー'
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
errors: {
|
errors: {
|
||||||
noSuchApp: {
|
noSuchApp: {
|
||||||
message: 'No such app.',
|
message: 'No such app.',
|
||||||
|
|
|
@ -41,6 +41,7 @@ export const meta = {
|
||||||
|
|
||||||
media: {
|
media: {
|
||||||
validator: $.optional.bool,
|
validator: $.optional.bool,
|
||||||
|
deprecated: true,
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,6 +138,7 @@ export const meta = {
|
||||||
mediaIds: {
|
mediaIds: {
|
||||||
validator: $.optional.arr($.type(ID)).unique().range(1, 4),
|
validator: $.optional.arr($.type(ID)).unique().range(1, 4),
|
||||||
transform: transformMany,
|
transform: transformMany,
|
||||||
|
deprecated: true,
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': '添付するファイル (このパラメータは廃止予定です。代わりに fileIds を使ってください。)'
|
'ja-JP': '添付するファイル (このパラメータは廃止予定です。代わりに fileIds を使ってください。)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ export const meta = {
|
||||||
|
|
||||||
mediaOnly: {
|
mediaOnly: {
|
||||||
validator: $.optional.bool,
|
validator: $.optional.bool,
|
||||||
|
deprecated: true,
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,7 @@ export const meta = {
|
||||||
|
|
||||||
mediaOnly: {
|
mediaOnly: {
|
||||||
validator: $.optional.bool,
|
validator: $.optional.bool,
|
||||||
|
deprecated: true,
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ export const meta = {
|
||||||
|
|
||||||
mediaOnly: {
|
mediaOnly: {
|
||||||
validator: $.optional.bool,
|
validator: $.optional.bool,
|
||||||
|
deprecated: true,
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ export const meta = {
|
||||||
media: {
|
media: {
|
||||||
validator: $.optional.nullable.bool,
|
validator: $.optional.nullable.bool,
|
||||||
default: null as any,
|
default: null as any,
|
||||||
|
deprecated: true,
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
'ja-JP': 'ファイルが添付された投稿に限定するか否か (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,6 +89,7 @@ export const meta = {
|
||||||
|
|
||||||
mediaOnly: {
|
mediaOnly: {
|
||||||
validator: $.optional.bool,
|
validator: $.optional.bool,
|
||||||
|
deprecated: true,
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,6 +98,7 @@ export const meta = {
|
||||||
|
|
||||||
mediaOnly: {
|
mediaOnly: {
|
||||||
validator: $.optional.bool,
|
validator: $.optional.bool,
|
||||||
|
deprecated: true,
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,6 +105,7 @@ export const meta = {
|
||||||
mediaOnly: {
|
mediaOnly: {
|
||||||
validator: $.optional.bool,
|
validator: $.optional.bool,
|
||||||
default: false,
|
default: false,
|
||||||
|
deprecated: true,
|
||||||
desc: {
|
desc: {
|
||||||
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,16 +3,16 @@ import config from '../../../config';
|
||||||
export const description = `
|
export const description = `
|
||||||
## Usage
|
## Usage
|
||||||
**APIはすべてPOSTでリクエスト/レスポンスともにJSON形式です。**
|
**APIはすべてPOSTでリクエスト/レスポンスともにJSON形式です。**
|
||||||
一部のAPIは認証情報(アクセストークン)が必要です。リクエストの際に\`i\`というパラメータでアクセストークンを添付してください。
|
一部のAPIはリクエストに認証情報(APIキー)が必要です。リクエストの際に\`i\`というパラメータでAPIキーを添付してください。
|
||||||
|
|
||||||
### 自分のアカウントのアクセストークンを取得する
|
### 自分のアカウントのAPIキーを取得する
|
||||||
「設定 > API」で、自分のアクセストークンを取得できます。
|
「設定 > API」で、自分のAPIキーを取得できます。
|
||||||
|
|
||||||
> アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。
|
> アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。
|
||||||
|
|
||||||
### アプリケーションとしてアクセストークンを取得する
|
### アプリケーションとしてAPIキーを取得する
|
||||||
直接ユーザーのアクセストークンをアプリケーションが扱うのはセキュリティ上のリスクがあるので、
|
直接ユーザーのAPIキーをアプリケーションが扱うのはセキュリティ上のリスクがあるので、
|
||||||
アプリケーションからAPIを利用する際には、アプリケーションとアプリケーションを利用するユーザーが結び付けられた専用のアクセストークンをMisskeyに発行してもらいます。
|
アプリケーションからAPIを利用する際には、アプリケーションとアプリケーションを利用するユーザーが結び付けられた専用のAPIキーを発行します。
|
||||||
|
|
||||||
#### 1.アプリケーションを登録する
|
#### 1.アプリケーションを登録する
|
||||||
まず、あなたのアプリケーションやWebサービス(以後、あなたのアプリと呼びます)をMisskeyに登録します。
|
まず、あなたのアプリケーションやWebサービス(以後、あなたのアプリと呼びます)をMisskeyに登録します。
|
||||||
|
@ -25,8 +25,7 @@ export const description = `
|
||||||
#### 2.ユーザーに認証させる
|
#### 2.ユーザーに認証させる
|
||||||
アプリを使ってもらうには、ユーザーにアカウントへのアクセスの許可をもらう必要があります。
|
アプリを使ってもらうには、ユーザーにアカウントへのアクセスの許可をもらう必要があります。
|
||||||
|
|
||||||
認証セッションを開始するには、[${config.apiUrl}/auth/session/generate](#operation/auth/session/generate) へパラメータに appSecret としてシークレットキーを含めたリクエストを送信します。
|
認証セッションを開始するには、[${config.apiUrl}/auth/session/generate](#operation/auth/session/generate) へパラメータに\`appSecret\`としてシークレットキーを含めたリクエストを送信します。
|
||||||
リクエスト形式はJSONで、メソッドはPOSTです。
|
|
||||||
レスポンスとして認証セッションのトークンや認証フォームのURLが取得できるので、認証フォームのURLをブラウザで表示し、ユーザーにフォームを提示してください。
|
レスポンスとして認証セッションのトークンや認証フォームのURLが取得できるので、認証フォームのURLをブラウザで表示し、ユーザーにフォームを提示してください。
|
||||||
|
|
||||||
あなたのアプリがコールバックURLを設定している場合、
|
あなたのアプリがコールバックURLを設定している場合、
|
||||||
|
@ -34,14 +33,14 @@ export const description = `
|
||||||
|
|
||||||
あなたのアプリがコールバックURLを設定していない場合、ユーザーがあなたのアプリの連携を許可したことを(何らかの方法で(たとえばボタンを押させるなど))確認出来るようにしてください。
|
あなたのアプリがコールバックURLを設定していない場合、ユーザーがあなたのアプリの連携を許可したことを(何らかの方法で(たとえばボタンを押させるなど))確認出来るようにしてください。
|
||||||
|
|
||||||
#### 3.ユーザートークンを取得する
|
#### 3.アクセストークンを取得する
|
||||||
ユーザーが連携を許可したら、[${config.apiUrl}/auth/session/userkey](#operation/auth/session/userkey) へリクエストを送信します。
|
ユーザーが連携を許可したら、[${config.apiUrl}/auth/session/userkey](#operation/auth/session/userkey) へリクエストを送信します。
|
||||||
|
|
||||||
上手くいけば、認証したユーザーのユーザートークンがレスポンスとして取得できます。おめでとうございます!
|
上手くいけば、認証したユーザーのアクセストークンがレスポンスとして取得できます。おめでとうございます!
|
||||||
|
|
||||||
ユーザートークンが取得できたら、*「ユーザーのユーザートークン+あなたのアプリのシークレットキーをsha256したもの」*をアクセストークンとして、APIにリクエストできます。
|
アクセストークンが取得できたら、*「ユーザーのアクセストークン+あなたのアプリのシークレットキーをsha256したもの」*をAPIキーとして、APIにリクエストできます。
|
||||||
|
|
||||||
アクセストークンの生成方法を擬似コードで表すと次のようになります:
|
APIキーの生成方法を擬似コードで表すと次のようになります:
|
||||||
\`\`\` js
|
\`\`\` js
|
||||||
const i = sha256(userToken + secretKey);
|
const i = sha256(userToken + secretKey);
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
|
@ -56,6 +56,7 @@ export function genOpenapiSpec(lang = 'ja-JP') {
|
||||||
return {
|
return {
|
||||||
description: (param.data || {}).desc,
|
description: (param.data || {}).desc,
|
||||||
default: (param.data || {}).default,
|
default: (param.data || {}).default,
|
||||||
|
deprecated: (param.data || {}).deprecated,
|
||||||
...((param.data || {}).default ? { default: (param.data || {}).default } : {}),
|
...((param.data || {}).default ? { default: (param.data || {}).default } : {}),
|
||||||
type: param.name === 'ID' ? 'string' : param.name.toLowerCase(),
|
type: param.name === 'ID' ? 'string' : param.name.toLowerCase(),
|
||||||
...(param.name === 'ID' ? { example: 'xxxxxxxxxxxxxxxxxxxxxxxx', format: 'id' } : {}),
|
...(param.name === 'ID' ? { example: 'xxxxxxxxxxxxxxxxxxxxxxxx', format: 'id' } : {}),
|
||||||
|
@ -97,6 +98,7 @@ export function genOpenapiSpec(lang = 'ja-JP') {
|
||||||
for (const [k, v] of Object.entries(endpoint.meta.params)) {
|
for (const [k, v] of Object.entries(endpoint.meta.params)) {
|
||||||
if (v.validator.data == null) v.validator.data = {};
|
if (v.validator.data == null) v.validator.data = {};
|
||||||
if (v.desc) v.validator.data.desc = v.desc[lang];
|
if (v.desc) v.validator.data.desc = v.desc[lang];
|
||||||
|
if (v.deprecated) v.validator.data.deprecated = v.deprecated;
|
||||||
if (v.default) v.validator.data.default = v.default;
|
if (v.default) v.validator.data.default = v.default;
|
||||||
porops[k] = v.validator;
|
porops[k] = v.validator;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue