• ガイド
  • CDN API・Newt API

SDK

Table of contents

NewtではCDN API・Newt APIへのリクエスト処理を簡単に実行していただくため、newt-client-js というJavaScript SDKを用意しています。
ソースコードはGitHub上に公開されており、Newt-Inc/newt-client-js からご確認いただけます。

基本的な使い方

以下の順番で説明します。

  • パッケージのインストール
  • クライアントの作成
  • メソッドの実行

パッケージのインストール

npm install newt-client-js
# or
yarn add newt-client-js

クライアントの作成

CDN APIまたはNewt APIにリクエストするためのクライアントを作成しましょう。

YOUR_SPACE_UID には、リクエストを行うスペースのスペースUIDを入力してください。

CDN APIにリクエストを行う場合、YOUR_API_TOKEN にCDN APIトークンを指定し、apiTypecdn を指定します。
Newt APIにリクエストを行う場合、YOUR_API_TOKEN にNewt APIトークンを指定し、apiTypeapi を指定します。

import { createClient } from 'newt-client-js'

const client = createClient({
  spaceUid: 'YOUR_SPACE_UID',
  token: 'YOUR_API_TOKEN',
  apiType: 'cdn', // "cdn" または "api" を指定する
})

メソッドの実行

例えば、コンテンツ一覧の取得をする場合、以下のように実行します。
YOUR_APP_UID には、取得したいコンテンツのApp UIDを入力してください。
YOUR_MODEL_UID には、取得したいコンテンツのモデルUIDを入力してください。

const res = await client.getContents({
  appUid: 'YOUR_APP_UID',
  modelUid: 'YOUR_MODEL_UID',
})

コンテンツ一覧の取得を行った場合、返却されるレスポンスは以下のようになります。

{
  "skip": 0,
  "limit": 100,
  "total": 15,
  "items": [
    {
      "_id": "6109f05d5d18d6006af5f385",
      "_sys": {
        "createdAt": "2023-08-06T00:18:26.810Z",
        "updatedAt": "2023-08-06T08:39:45.628Z",
        "customOrder": 15,
        "raw": {
          "createdAt": "2023-08-05T05:29:09.614Z",
          "updatedAt": "2023-08-06T08:39:45.628Z",
          "firstPublishedAt": "2023-08-06T00:18:26.810Z",
          "publishedAt": "2023-08-06T08:39:45.628Z"
        }
      }
      "title": "title1",
      "description": "description1",
      ...
    },
    {
      "_id": "6109f05d5d18d6006af5f384",
      "_sys": {
        "createdAt": "2023-08-04T03:05:09.719Z",
        "updatedAt": "2023-08-06T07:42:40.902Z",
        "customOrder": 14,
        "raw": {
          "createdAt": "2023-08-03T03:21:10.832Z",
          "updatedAt": "2023-08-06T07:42:40.902Z",
          "firstPublishedAt": "2023-08-04T03:05:09.719Z",
          "publishedAt": "2023-08-06T07:42:40.902Z"
        }
      }
      "title": "title2",
      "description": "description2",
      ...
    },
    ...
  ]
}

各UID・ID・APIトークンの確認方法

スペースUID

スペース設定 > 一般から確認できます。
sdk01.jpg

App UID

App設定 > 一般から確認できます。
sdk02.jpg

モデルUID

モデル設定から確認できます。
sdk03.jpg

コンテンツID

コンテンツ編集画面から確認できます。
sdk04.jpg

APIトークン

スペース設定 > APIキーから、CDN APIトークンとNewt APIトークンをそれぞれ確認できます。
sdk05.png

createClientのオプション

クライアントの作成では、設定をカスタマイズすることが可能です。
利用可能なオプションは以下の通りとなります。

名前必須デフォルト説明
spaceUidリクエスト対象のスペースUID
tokenCDN APIにリクエストを行う場合はCDN APIトークン。
Newt APIにリクエストを行う場合はNewt APIトークン。
apiTypecdnCDN APIにリクエストを行う場合は cdn
Newt APIにリクエストを行う場合は api
adapterundefinedリクエストを処理するaxiosのカスタムアダプタ。詳細は axiosのRequest Config にある adapter をご参照ください。
retryOnErrortrueデフォルトでは、レスポンスステータスが 429 または 500 の場合にリトライを行います。この挙動を無効にするには、false に設定します。
retryLimit3リトライの回数を指定します。10 以下の数字を指定してください。
fetchundefinedglobalThis.fetchnode-fetch などのお好きなfetch関数を指定できます。
このオプションが指定された場合、axiosではなく指定されたfech関数でリクエストが実行されます。ただし、adapter オプションは無視され、リトライも実行されないのでご注意ください。

リクエストにaxiosを利用するか、fetchを利用するか、指定できるようになっています。

  • fetch オプションを指定しない場合、リクエストは axios で実行され、 adapterretryOnErrorretryLimit オプションがすべて考慮されます。
  • fetch オプションに値を指定すると、axiosではなく指定されたfetch関数でリクエストが実行されます。この場合、adapter オプションは考慮されず、リトライも実行されないのでご注意ください。

メソッドの種類

実行可能なメソッドは以下の4種類となります。

  • getContents: コンテンツ一覧の取得
  • getContent: 単一コンテンツの取得
  • getFirstContent: 条件に合致する最初のコンテンツの取得
  • getApp: App情報の取得

なお、具体的なユースケースについては、NewtのAPIで利用できるクエリパラメータを理解して、様々なクエリを実行する で紹介しているので、ご確認ください。

getContents: コンテンツ一覧の取得

実行例

const res = await client.getContents({
  appUid: 'YOUR_APP_UID',
  modelUid: 'YOUR_MODEL_UID',
  query: {
    '_sys.createdAt': { gt: '2023-07-01' },
    category: 'news'
  }
})

返却されるレスポンス例

{
  "skip": 0,
  "limit": 100,
  "total": 15,
  "items": [
    {
      "_id": "6109f05d5d18d6006af5f385",
      "_sys": {
        "createdAt": "2023-08-06T00:18:26.810Z",
        "updatedAt": "2023-08-06T08:39:45.628Z",
        "customOrder": 15,
        "raw": {
          "createdAt": "2023-08-05T05:29:09.614Z",
          "updatedAt": "2023-08-06T08:39:45.628Z",
          "firstPublishedAt": "2023-08-06T00:18:26.810Z",
          "publishedAt": "2023-08-06T08:39:45.628Z"
        }
      }
      "title": "title1",
      "description": "description1",
    },
    {
      "_id": "6109f05d5d18d6006af5f384",
      "_sys": {
        "createdAt": "2023-08-04T03:05:09.719Z",
        "updatedAt": "2023-08-06T07:42:40.902Z",
        "customOrder": 14,
        "raw": {
          "createdAt": "2023-08-03T03:21:10.832Z",
          "updatedAt": "2023-08-06T07:42:40.902Z",
          "firstPublishedAt": "2023-08-04T03:05:09.719Z",
          "publishedAt": "2023-08-06T07:42:40.902Z"
        }
      }
      "title": "title2",
      "description": "description2",
    },
    ...
  ]
}

メソッドで指定可能なパラメータ

名前必須説明
appUidリクエスト対象のApp UID
modelUidリクエスト対象のモデルUID
query利用するクエリパラメータを指定する

クエリで指定可能なパラメータ

名前指定形式説明
YOUR_FIELD-ご自身で定義したフィールドに対してクエリをかけられます
select文字列の配列指定したフィールドの情報のみ取得する
order文字列の配列指定した順番で取得する
limit数字返却されるコンテンツの最大件数を指定する
skip数字何件のコンテンツをスキップするか指定する
depth数字画像フィールド・ファイルフィールド・参照フィールドで、取得するデータの階層を指定する
or配列いずれかの条件に合致するコンテンツを取得する(複数条件の関係を指定)
and配列すべての条件に合致するコンテンツを取得する(複数条件の関係を指定)

フィールドに対して指定可能な演算子
ご自身で定義したフィールドに対してフィルタをかけることで、条件に合致するコンテンツのみを取得できます。

名前指定形式説明
なし-指定した値に一致するコンテンツを取得する
ne文字列 / 数字 / 真偽値指定した値に一致するコンテンツを除外する
match文字列指定した値を含むコンテンツを取得する
in文字列の配列 / 数字の配列指定した要素のどれかに一致するコンテンツを取得する
nin文字列の配列 / 数字の配列指定した要素のどれかに一致するコンテンツを除外する
all文字列の配列 / 数字の配列指定した要素のすべてを含むコンテンツを取得する
exists真偽値指定したフィールドを持つ(持たない)コンテンツを取得する
gt文字列 / 数字指定した値より大きいコンテンツを取得する
gte文字列 / 数字指定した値以上のコンテンツを取得する
lt文字列 / 数字指定した値未満のコンテンツを取得する
lte文字列 / 数字指定した値以下のコンテンツを取得する
fmttextリッチテキストまたはマークダウンのフィールドに対して、取得形式を(HTMLではなく)テキスト形式にする

getContent: 単一コンテンツの取得

実行例

const res = await client.getContents({
  appUid: 'YOUR_APP_UID',
  modelUid: 'YOUR_MODEL_UID',
  contentId: 'YOUR_CONTENT_ID'
})

返却されるレスポンス例

{
  "_id": "6109f05d5d18d6006af5f385",
  "_sys": {
    "createdAt": "2023-08-06T00:18:26.810Z",
    "updatedAt": "2023-08-06T08:39:45.628Z",
    "customOrder": 15,
    "raw": {
      "createdAt": "2023-08-05T05:29:09.614Z",
      "updatedAt": "2023-08-06T08:39:45.628Z",
      "firstPublishedAt": "2023-08-06T00:18:26.810Z",
      "publishedAt": "2023-08-06T08:39:45.628Z"
    }
  }
  "title": "title1",
  "description": "description1",
},

メソッドで指定可能なパラメータ

名前必須説明
appUidリクエスト対象のApp UID
modelUidリクエスト対象のモデルUID
contentIdリクエスト対象のコンテンツID
query利用するクエリパラメータを指定する

クエリで指定可能なパラメータ

名前指定形式説明
select文字列の配列指定したフィールドの情報のみ取得する
depth数字画像フィールド・ファイルフィールド・参照フィールドで、取得するデータの階層を指定する

getFirstContent: 条件に合致する最初のコンテンツの取得

実行例

const res = await client. getFirstContent({
  appUid: 'YOUR_APP_UID',
  modelUid: 'YOUR_MODEL_UID',
  query: {
    title: 'title1'
  }
})

返却されるレスポンス例

{
  "_id": "6109f05d5d18d6006af5f385",
  "_sys": {
    "createdAt": "2023-08-06T00:18:26.810Z",
    "updatedAt": "2023-08-06T08:39:45.628Z",
    "customOrder": 15,
    "raw": {
      "createdAt": "2023-08-05T05:29:09.614Z",
      "updatedAt": "2023-08-06T08:39:45.628Z",
      "firstPublishedAt": "2023-08-06T00:18:26.810Z",
      "publishedAt": "2023-08-06T08:39:45.628Z"
    }
  }
  "title": "title1",
  "description": "description1",
},

メソッドで指定可能なパラメータ

名前必須説明
appUidリクエスト対象のApp UID
modelUidリクエスト対象のモデルUID
query利用するクエリパラメータを指定する

クエリで指定可能なパラメータ
limit 以外のgetContentsで利用可能なパラメータを利用できます。

名前指定形式説明
YOUR_FIELD-ご自身で定義したフィールドに対してクエリをかけられます
select文字列の配列指定したフィールドの情報のみ取得する
order文字列の配列指定した順番で取得する
skip数字何件のコンテンツをスキップするか指定する
depth数字画像フィールド・ファイルフィールド・参照フィールドで、取得するデータの階層を指定する
or配列いずれかの条件に合致するコンテンツを取得する(複数条件の関係を指定)
and配列すべての条件に合致するコンテンツを取得する(複数条件の関係を指定)

フィールドに対して指定可能な演算子

名前指定形式説明
なし-指定した値に一致するコンテンツを取得する
ne文字列 / 数字 / 真偽値指定した値に一致するコンテンツを除外する
match文字列指定した値を含むコンテンツを取得する
in文字列の配列 / 数字の配列指定した要素のどれかに一致するコンテンツを取得する
nin文字列の配列 / 数字の配列指定した要素のどれかに一致するコンテンツを除外する
all文字列の配列 / 数字の配列指定した要素のすべてを含むコンテンツを取得する
exists真偽値指定したフィールドを持つ(持たない)コンテンツを取得する
gt文字列 / 数字指定した値より大きいコンテンツを取得する
gte文字列 / 数字指定した値以上のコンテンツを取得する
lt文字列 / 数字指定した値未満のコンテンツを取得する
lte文字列 / 数字指定した値以下のコンテンツを取得する
fmttextリッチテキストまたはマークダウンのフィールドに対して、取得形式を(HTMLではなく)テキスト形式にする

getApp: App情報の取得

実行例

const res = await client.getApp({
  appUid: 'YOUR_APP_UID'
})

返却されるレスポンス例

{
  "name": "cool-blog",
  "uid": "cool-blog-123",
  "icon": {
    "type": "emoji",
    "value": "🎾"
  },
  "cover": {
    "type": "image",
    "value": "https://storage.googleapis.com/newt-images/615faa94262844aa189a2f5e/615faa94c374a6532fe4b123/covers/example.jpeg"
  }
},

メソッドで指定可能なパラメータ

名前必須説明
appUidリクエスト対象のApp UID

TypeScriptを利用する場合

事前定義されている型

事前定義されている以下の型を利用することで、型定義を簡単に行なえます。

  • Content: コンテンツ共通のプロパティが定義されています
  • Image: 画像フィールドのプロパティが定義されています
  • File: ファイルフィールドのプロパティが定義されています

Content

コンテンツ共通のプロパティが定義されています。

{
  _id: string
  _sys: {
    createdAt: string
    updatedAt: string
    customOrder: number
    raw: {
      createdAt: string
      updatedAt: string
      firstPublishedAt: string
      publishedAt: string
    }
  }
}

使用例

import type { Content } from 'newt-client-js'

interface Article extends Content {
  title: string
  slug: string
  body: string
}

Image

画像フィールドのプロパティが定義されています。

{
  _id: string
  src: string
  fileName: string
  fileType: string
  fileSize: number
  width: number
  height: number
  title: string
  description: string
  altText: string
  metadata: Record<string, string | number | boolean>
}

使用例

import type { Image } from 'newt-client-js'

interface Author {
  name: string
  profileImage: Image
}

File

ファイルフィールドのプロパティが定義されています。

{
  _id: string
  src: string
  fileName: string
  fileType: string
  fileSize: number
  width: number | null
  height: number | null
  title: string
  description: string
  altText: string
  metadata: Record<string, string | number | boolean>
}

使用例

import type { File } from 'newt-client-js'

interface Event {
  title: string
  datetime: string
  survey: File
}

戻り値の型指定

getContentsgetContentgetFirstContent では、ジェネリクスを指定することで、戻り値の型を指定できます。

使用例
例えば getContents の場合、ジェネリクスを指定すると、戻り値の items の型が指定した型の配列となります。
以下の場合、戻り値の items の型は、Article の配列となります。

import type { Article } from '@/types/blog'

const res = await client.getContents<Article>({
  appUid: 'YOUR_APP_UID',
  modelUid: 'YOUR_MODEL_UID',
})
NewtMade in Newt