Movable Type CMSプラットフォーム Movable Type
ドキュメントサイト

Data API DocumentData API ドキュメント

クイック スタート ガイド

イントロダクション

ウェブサイトやアプリケーションから Data API を使う方法について解説します。各エンドポイントや、リソースについての詳細については、API リファレンスをご覧ください。

事前の設定

Movable Type 7 r.4605 / 6.5.3 / 6.3.11 以降では、初期状態で Data API によるアクセスが禁止されています。利用するには、システムと対象のサイトで、管理画面からアクセスを許可してください。設定の方法は、システムスコープで Data API を設定するおよびサイトスコープで Data API を設定するを参照してください。

ユーザー認証とアクセストークン

公開されていない記事の情報を取得する場合や、新しく記事を投稿する場合はユーザー認証が必要です。もちろん、リクエストに対してユーザーが適切な権限を持っている必要があります。ユーザー認証は、Movable Type の管理画面と同様にユーザー名とパスワードを用いて行われます。

また、認証が必要なリクエストをおこなう場合、ユーザー認証とは別にリクエストごとに「アクセストークン」と呼ばれる生存期間の短いトークンを付加する必要があります。

Data API でユーザー認証を行なう(サインイン画面を利用する)

Web ブラウザから Data API を利用する場合には、authorization エンドポイントにアクセスして、サインイン画面を経由した認証を行います。

リクエスト

GET https://path/to/mt-data-api.cgi/v7/authorization?clientId=<YOUR-CLIENT-ID>&redirectUrl=<REDIRECT-TO-URL>

リクエスト パラメータ

clientId(必須)
アプリケーション固有の任意のキーを指定します。アルファベット、(_)アンダースコア、(-)ダッシュ、で構成された任意の文字列を指定できます。
redirectUrl(必須)
サインインに成功したとき、遷移するリダイレクト先のURLを指定します。

レスポンス

サインイン画面が表示され、サインインに成功すると redirectUrl で指定された URL にリダイレクトされます。

Data API でユーザー認証を行なう(直接サインインする)

Web ブラウザではなく、アプリケーションから認証を行う場合には、authentication エンドポイントを利用します。このエンドポイントによるユーザー認証は、サインインの処理と同様に、username と password による認証を行います。

リクエスト

POST https://path/to/mt-data-api.cgi/v7/authentication

リクエスト パラメータ

パラメータは、リクエストのボディとして送信します。従って、application/x-www-form-urlencodedまたは、multipart/form-data 形式である必要があります。

username(必須)
サインインするユーザーのユーザー名を指定します。
password(必須)
サインインするユーザーのパスワードを指定します。v3 からは、CMS のログインパスワードではなく、Web サービス パスワードを指定します。
remember
1 を指定すると、ユーザーのログインセッションは、サインアウトするまで有効になります。
clientId(必須)
アプリケーション固有の任意のキーを指定します。アルファベット、(_)アンダースコア、(-)ダッシュ、で構成された任意の文字列を指定できます。
mtDataApiLoginMagicToken
Web ブラウザから認証するときに指定します。有効な値を指定すると、セッション ID をレスポンスに含めず、httponly の Cookie に保存します。Web ブラウザ以外から認証する場合は、指定する必要はありません。

レスポンス

username と password の組み合わせが正しい場合、sessionId, accessToken が取得できます。

{
  "accessToken": "0t60z2zrz89WSfi8euUl21VZ3LOG4tc1pYWhzZLj",
  "sessionId": "ThRsb2XwYvFs93gvmbUeF3nu3JDIEIYP8polopI6",
  "expiresIn": 3600,
  "remember": false
}

サンプルコード (JavaScript)

ここでは、fetch を利用した JavaScript のサンプルコードを紹介します。

const res = await fetch("https://example.com/mt/mt-data-api.cgi/v7/authentication", {
    method: "POST",
    body: new URLSearchParams({
        username: "your-username",
        password: "your-web-service-password",
        clientId: "test",
    }),
});
const data = await res.json();
console.log(data.accessToken);

アクセストークンを取得する

前述のとおり、認証が必要なリクエストを行う場合は、アクセストークンをリクエスト・ヘッダーに付加してリクエストを実行する必要があります。アクセストークンは、AccessTokenTTL 環境変数で指定された秒数(初期値: 3600秒 = 1時間)の間だけ利用できる、有効期限付きのトークンです。

生存期間中は、同じトークンを利用することができますが、できるだけリクエスト単位で新しいトークンを取得することを推奨します。

リクエスト

POST https://path/to/mt-data-api.cgi/v7/token

リクエスト パラメータ

パラメータは、リクエストのボディとして送信します。従って、application/x-www-form-urlencodedまたは、multipart/form-data 形式である必要があります。

clientId(必須)
サインインの際に使用した clientId と同じ値を指定します。X-MT-AuthorizationにsessionIdを指定する場合は、clientId を指定する必要はありません。

レスポンス

有効なセッションである場合、新しいアクセストークンを取得できます。

{
  "accessToken": "UQddkGoFAR0PlqLiaatJGe22HkqxA3pTrNpT2DjI",
  "expiresIn": 3600
}

サンプルコード (JavaScript)

ここでは、fetch を利用した JavaScript のサンプルコードを紹介します。

const sessionId = "MTAuth sessionId=BKuU8Pc25oZRCuaNDijoO8RFS1itBmPaVM7LgELH";
const res = await fetch("https://example.com/mt/mt-data-api.cgi/v7/token", {
    method: "POST",
    headers: {
        "X-MT-Authorization": sessionId,
    },
});
const data = await res.json();
console.log(data.accessToken);

アクセストークンを付加したリクエストを行なう

アクセストークンは、X-MT-Authorization リクエストヘッダーに MTAuth accessToken=<ACCESS_TOKEN>という形式で指定します。

サンプルコード (JavaScript)

ここでは、fetch を利用した JavaScript のサンプルコードを紹介します。

// sessionId をもとに新しいアクセストークンを取得します。
const sessionId = "MTAuth sessionId=BKuU8Pc25oZRCuaNDijoO8RFS1itBmPaVM7LgELH";
const tokenRes = await fetch("https://example.com/mt/mt-data-api.cgi/v7/token", {
    method: "POST",
    headers: {
        "X-MT-Authorization": sessionId,
    },
});
const data = await tokenRes.json();

// アクセストークンをヘッダーに付加して、非公開の記事を取得します。
const accessToken = "MTAuth accessToken=" + data.accessToken;
const entryRes = await fetch("https://example.com/mt/mt-data-api.cgi/v7/sites/1/entries/1", {
    method: "GET",
    headers: {
        "X-MT-Authorization": accessToken,
    },
});
const entry = await entryRes.json();
console.log(entry.title);

関連ページ