microCMS JavaScript SDK.

Overview

microCMS JavaScript SDK

It helps you to use microCMS from JavaScript and Node.js applications.

Getting Started

Install

Install npm package.

$ npm install microcms-js-sdk

or

$ yarn add microcms-js-sdk

CDN support.

<script src="https://unpkg.com/microcms-js-sdk@latest/dist/umd/microcms-js-sdk.js"></script>

How to use

First, create a client.

const { createClient } = require("microcms-js-sdk"); // CommonJS
import { createClient } from 'microcms-js-sdk'; //ES6

// Initialize Client SDK.
const client = createClient({
  serviceDomain: "YOUR_DOMAIN", // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
  apiKey: "YOUR_API_KEY",
  globalDraftKey: "YOUR_GLOBAL_DRAFT_KEY", // If need 
});

When using with a browser.

<script>
const { createClient } = microcms;

// Initialize Client SDK.
const client = createClient({
  serviceDomain: "YOUR_DOMAIN", // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
  apiKey: "YOUR_API_KEY",
  globalDraftKey: "YOUR_GLOBAL_DRAFT_KEY", // If need 
});
</script>

After, How to use it below.

client
  .get({
    endpoint: 'endpoint',
    queries: { limit: 20, filters: 'createdAt[greater_than]2021' },
    useGlobalDraftKey: false, // This is an option if your have set the globalDraftKey. Default value true.
  })
  .then((res) => console.log(res))
  .catch((err) => console.log(err));

client
  .get({
    endpoint: 'endpoint',
    contentId: 'contentId',
    queries: { fields: 'title,publishedAt' },
  })
  .then((res) => console.log(res))
  .catch((err) => console.log(err));

If you are using TypeScript, specify the response type.

client.get<ResponseType>({endpoint: 'endpoint'})

LICENSE

Apache-2.0

Comments
  • Support WRITE API

    Support WRITE API

    概要

    WRITE APIに対応した関数を追加しました。

    テスト方法

    create

    • contentIdが指定されたパターンとそうでないパターンでそれぞれPOST, PUT APIが呼ばれたことを確認
    • status=draftが指定できることを確認
    • bodyが指定されたことを確認

    update

    • リスト形式とオブジェクト形式のAPIが呼ばれたことを確認
    • bodyが指定されたことを確認

    delete

    • DELETE APIが呼ばれたことを確認
    • contentIdが指定されていないときにエラーを返すことを確認
    opened by dc7290 5
  • node-fetchからcross-fetchへの変更

    node-fetchからcross-fetchへの変更

    概要

    node-fetchを利用した現在のSDKではVite環境でFetchのJSONパースに失敗することがあるためwindow.fetchを利用したい。

    スクリーンショット 2022-10-23 22 06 55

    また、node環境ではv18が一般的になるまで、まだnode-fetchを利用する必要があるためnode-fetchを利用したい。 上記を叶えるためにfetchのプロキシとして動作するcross-fetchを利用する形へ実装方法を変更しました。

    また、Cloudflare Workers環境などではパフォーマンスの観点からもWorkersのGlobal Fetchを利用したいため、createClientにカスタムfetchをオプションとして渡せるようにしています。

    const client = createClient({
      serviceDomain: "YOUR_DOMAIN", // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
      apiKey: "YOUR_API_KEY",
      customFetcher: fetch.bind(globalThis), // Provide a custom `fetch` implementation as an option
    });
    
    opened by himorishige 2
  • テストの追加

    テストの追加

    概要

    既存のコードに関してテストを追加しました。

    • tests/utils/isCheckValue.test.ts

    基本的な値に対してisXXX系関数のテストをしました。

    • tests/utils/parseQuery.test.ts

    fiedsに配列、数字、文字列を指定した場合とオブジェクトではない値を入力した際のテストをしました。

    • tests/createClient.test.ts

    意図通りの関数が返されるかと、未指定の引数があったときのエラーをテストしました。

    • tests/get.test.ts

    get関数を使って、 リスト形式、リスト形式の詳細、オブジェクト形式それぞれのアクセスでデータが取得できるかと、 未指定の引数があった時、サーバエラー時の処理をテストしました。

    構成

    テストツール: Jest モックサーバー: MSW

    opened by dc7290 2
  • chore: Error handling of makeRequest function

    chore: Error handling of makeRequest function

    https://github.com/wantainc/microcms-js-sdk/issues/9 エラーハンドリング関連でPRさせていただきます。

    const client = createClient({
      serviceDomain: "YOUR_DOMAIN",
      apiKey: "YOUR_API_KEY",
    });
    

    上記の定義時にserviceDomainを間違えるとmakeRequest関数内のfetchで”404”になり、同関数のcatch (error) {} 内でエラーがキャッチされていない気がしました。

    検証内容 (/example/javascript のサンプルコードを使用) 存在しないであろうserviceDomainを入力した場合は下記の様なエラーがでます。

    • Uncaught (in promise) SyntaxError: Unexpected end of JSON input

    しかし、これはmakeRequest関数内のcatch (error) {} ではない場所からthrowされていると思われます。 (エラー発生の行がコンソールに出力されていない)

    MDNからの一部引用ですが、fetch()は404の場合エラーをthrowしない様ですね。

    ネットワークエラーに遭遇すると fetch() promise は TypeError を返して reject 状態になります。サーバー側の CORS が適切に設定されていない場合も同様です(アクセス権の問題ですけどね) — 一方で例えば 404 はネットワークエラーを構成しません。

    Fetch の使用 - Web API | MDN

    fetchに失敗した場合は適切にエラーが表示された方がよいかと思いますので、makeRequest関数内についてはresponse.okでエラーハンドリングした方が良いかもと思いました。 この変更によってコンソールにエラー箇所が表示されているかと思います。

    エラーメッセージはもう少し表現を変えても良いかなと悩みました... 適宜変更していただければと思います。

    opened by kazuhe 2
  • delete apiはjsonを返さないのでそのように変更

    delete apiはjsonを返さないのでそのように変更

    概要

    DELETE APIにおいて返却される値は空であるところ、response.json()をしてしまっていたので DELETEの場合は何も返さないように変更しました。

    背景

    delete関数を実行すると処理自体は完了するが、 node-fetchのInvalid JSONエラーが出る。

    変更の種類

    fix

    opened by dc7290 1
  • 型定義を関数の実態に合わせる

    型定義を関数の実態に合わせる

    概要

    isCheckValueファイルの関数における型定義を実態に合わせる変更をしました。 また、isString 関数のチェックで、 nullじゃない判定 等価演算子を使った判定 がありましたので、適切な判定に修正しています。

    なぜ

    1. isString は文字列しか受け取れず、型の判定をするということができない。(例えばテストを書く際に文字列以外を渡せない)
    2. 返り値をisアサーションにすることで、実装上もその型ガードの後の記述では想定通りの型となる
    opened by dc7290 1
  • Request: `queries.fields`にstring[]で渡せるようにしたい

    Request: `queries.fields`にstring[]で渡せるようにしたい

    現在、queries.fieldsに渡す情報はカンマ区切りのstringですが、[ 'title', 'publishedAt' ]のようにstring[]も渡せるようにして欲しいです。

    理由としては、今後配列形式であれば APIスキーマ情報 をtypescriptで型定義することで、queries.fieldsなどに渡すパラメーターに型補完を効かせることができるのではないか?と考えたためです。 example: string[] => ( 'id' | 'title' | 'body' )[]

    Before

    client.get({
      endpoint: 'endpoint',
      queries: { fields: 'title,publishedAt' },
    })
    

    After

    client.get({
      endpoint: 'endpoint',
      queries: { fields: [ 'title', 'publishedAt' ] },
    })
    

    Feature

    type EndPointContent = {
      id: string
      name: string
      body: string
    }
    
    
    client.get<EndPointContent>({
      endpoint: 'endpoint',
      queries: { fields: [ 'id', 'name' ] }, // 型補完が効いている状態
    })
    
    opened by tsuki-lab 1
  • feature: Improved type definition

    feature: Improved type definition

    型定義の見直しをしました。ご確認お願いします。

    変更点

    • types.tsの内容を参照できるように変更

    以下のようにtypes.tsの内容をライブラリで参照できるようになります。

    import { MicroCMSClient } from 'microcms-js-sdk';
    
    • 共通の型を定義

    追加した型定義は下記を参照。 https://github.com/microcmsio/microcms-js-sdk/blob/feature/types/src/types.ts

    • getListの追加

    TypeScriptでリスト形式のコンテンツを取得する際に使えるAPIを追加しました。

    client.getList<Post>({ //値の定義 })
    
    • getListDetailの追加

    TypeScriptでリスト形式のコンテンツの詳細を取得する際に使えるAPIを追加しました。

    client.getList<Post>({ //値の定義 })
    
    • getObjectの追加

    TypeScriptでオブジェクト形式のコンテンツを取得する際に使えるAPIを追加しました。

    client.getObject<Post>({ //値の定義 })
    

    なお、既存のgetメソッドに仕様変更はありません。

    opened by hiro08gh 1
  • chore: change build format

    chore: change build format

    ビルド時にファイル名 + 各フォーマット.jsで出力するように変更しました。

    変更点

    • dist/cjs/microcms-js-sdk -> dist/microcms-js-sdk.js
    • dist/esm/microcms-js-sdk -> dist/microcms-js-sdk.esm.js
    • dist/umd/microcms-js-sdk -> dist/microcms-js-sdk.umd.js

    影響

    unpkgで参照しているumdファイルのパスが変わります。

    <script src="https://unpkg.com/microcms-js-sdk@latest/dist/microcms-js-sdk.umd.js"></script>
    
    opened by hiro08gh 1
  • `richEditorFormat`のオプションがMicroCMSQueriesに存在しない

    `richEditorFormat`のオプションがMicroCMSQueriesに存在しない

    Document: https://document.microcms.io/content-api/get-content#hefb095db2a

    https://github.com/microcmsio/microcms-js-sdk/blob/f130f3d67cbc727ffc831fd77d19c8760ca4603c/src/types.ts#L19-L29

    opened by tsuki-lab 0
  • エラーメッセージをわかりやすくする

    エラーメッセージをわかりやすくする

    response.okfalseの時にthrowされることによって、catch節に移動してしまい、 全て同じエラー内容が返されていましたのでそれを修正しました。 また、現状の実装ならcatch節に入るのはfetchでネットワークエラーになった場合のみなので、 そのようにエラーメッセージを修正しています。

    スクリーンショット 2022-11-09 18 07 39
    opened by dc7290 0
  • 通信失敗時のリトライ処理が行われない

    通信失敗時のリトライ処理が行われない

    SDKにリトライオプションがないためNext.jsなどでビルドを行う際にビルド全体が停止してしまうか一部のデータが不足してしまう可能性が高いです。 クライアント側でリトライ処理を書けば良いのですが、毎回その実装を行うのは手間がかかります。

    提案

    インタフェース提案を行いますがこの通りでなくても構いません。

    • client 生成時にデフォルトのリトライ設定ができる
    //例
    const client = createClient({
      serviceDomain: "YOUR_DOMAIN", // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
      apiKey: "YOUR_API_KEY",
      retry: true, //新しいパラメータ
    });
    
    • getなどリクエスト実行時にリトライ設定ができる
    //例
    client
      .get({
        endpoint: 'endpoint',
        queries: { limit: 20, filters: 'createdAt[greater_than]2021' },
        retry: true, //新しいパラメータ
      })
    

    考慮事項

    • 実際にはAPIが返却するレスポンスステータスを見てリトライするかを判別する必要がありそうです。
    Transient errors (HTTP status codes 400, 408, 500, 502, 503, and 504) and throttling errors (HTTP status codes 400, 403, 429, 502, 503, and 509) can all be retried.
    
    • リトライの実装に関しては ExponentialBackoff を行うなどmicroCMSの制限事項に沿うための実装を行う必要があると考えます。
    opened by shoma2da 0
  • Management API 対応

    Management API 対応

    日頃からお世話になっております。

    本番環境では公開済みのコンテンツのみを表示したいが、テスト環境では下書き状態のコンテンツも含めて表示し、一覧ページや詳細ページなどサイト全体の表示を確認したいという状況に直面しましたので、パラメータなどで叩く先を Management API に切り替えられるようにしていただけると大変ありがたいです…!

    opened by albno273 2
Releases(v2.3.2)
  • v2.3.2(Nov 18, 2022)

    Fixes

    • richEditorFormatオプションをMicroCMSQueriesに追加 by @tsuki-lab in https://github.com/microcmsio/microcms-js-sdk/pull/45

    What's Changed

    • richEditorFormatオプションをMicroCMSQueriesに追加 by @tsuki-lab in https://github.com/microcmsio/microcms-js-sdk/pull/45

    Full Changelog: https://github.com/microcmsio/microcms-js-sdk/compare/v2.3.1...v2.3.2

    Source code(tar.gz)
    Source code(zip)
  • v2.3.1(Nov 11, 2022)

    Fixes

    • Make error messages easy to understand by @dc7290 in https://github.com/microcmsio/microcms-js-sdk/pull/41

    CI

    • Set up CI workflow by @dc7290 in https://github.com/microcmsio/microcms-js-sdk/pull/42

    Full Changelog: https://github.com/microcmsio/microcms-js-sdk/compare/v2.3.0...v2.3.1

    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Oct 25, 2022)

    • node-fetchからcross-fetchへの変更 https://github.com/microcmsio/microcms-js-sdk/pull/39

    Features

    • fetchライブラリをnode-fetchからcross-fetchへ変更しました。
    Source code(tar.gz)
    Source code(zip)
  • v2.2.1(Aug 9, 2022)

  • v2.2.0(Aug 8, 2022)

    • 型定義を関数の実態に合わせる https://github.com/microcmsio/microcms-js-sdk/pull/29
    • テストの追加 https://github.com/microcmsio/microcms-js-sdk/pull/30
    • Support WRITE API https://github.com/microcmsio/microcms-js-sdk/pull/31
    • Promise.catchではconsole.errorを使うようにする https://github.com/microcmsio/microcms-js-sdk/pull/33

    Features

    • WRITE API に対応しました
      • create, update, deleteメソッドの追加
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Jul 29, 2022)

    MicroCMSDate型のpublishedAtとrevisedAtをオプショナルプロパティにする修正 #27

    Features

    MicroCMSDateのpublishedAtrevisedAtをオプショナルに変更する修正を行いました。

    Special thanks. @yassh

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Oct 25, 2021)

    新形式APIキー(X-MICROCMS-API-KEY)対応 #23

    Features

    新APIキーのリニューアルに伴い内部のリクエストをX-MICROCMS-API-KEYに変更しました。旧APIキーに互換性があるので、既存のAPIに影響はありません。

    Special thanks. @YouheiNozaki

    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Oct 19, 2021)

    feature: Improved type definition #17 Allow queries.fields to string array #19 Allow queries.ids to string array #20

    Features

    • queries.fieldsとqueries.idsの型定義をstring|string[]に変更しました。
    • types.tsの内容を参照できるように変更しました。
    • getListgetListDetailgetObjectのAPIが追加されました。

    Special thanks. @tsuki-lab

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Jun 29, 2021)

  • v1.1.0(May 25, 2021)

Movehat is a TypeScript SDK for Move on Sui built on top of Sui's TypeScript SDK and our fork of Ian Macalinao's `move-ts`.

Movehat Movehat is a TypeScript SDK for Move on Sui built on top of Sui's TypeScript SDK and our fork of Ian Macalinao's move-ts. Movehat aspires to b

Pentagon 10 Sep 30, 2022
Anagolay Network Javascript SDK written in Typescript

Anagolay Network Javascript SDK written in Typescript. This repo will contain the bindings to Anagolay Network with the sane defaults for pallet usage

Anagolay Network 4 Nov 26, 2022
Codemod scripts to update AWS SDK for JavaScript APIs.

aws-sdk-js-codemod This repository contains a collection of codemod scripts for use with JSCodeshift that help update AWS SDK for JavaScript APIs. The

Amazon Web Services - Labs 17 Jan 2, 2023
It's a javascript Class which contains utility methods that simplify working with google maps web SDK

About GoogleMapsJSHelper It's a javascript Class which contains utility methods that simplify working with google maps web SDK Note: i used ES7 Class

Sami Alateya 6 Jul 23, 2022
A JavaScript (and TypeScript) SDK for the ScreenshotOne.com API to take screenshots of any URL

jssdk An official Screenshot API client for JavaScript and TypeScript. It takes minutes to start taking screenshots. Just sign up to get access and se

ScreenshotOne.com 7 Oct 15, 2022
The official Directus SDK for use in JavaScript!

Directus JS SDK Installation npm install @directus/sdk Basic Usage import { Directus } from '@directus/sdk'; const directus = new Directus('http://d

Directus 36 Dec 29, 2022
Unofficial port of the Sentry SDK for JavaScript to Deno.

Sentry_deno This is an unofficial port of the Sentry SDK (@sentry/browser) to Deno. import * as Sentry from "https://deno.land/x/sentry_deno/main.ts";

Geert-Jan Zwiers 11 Aug 11, 2022
BotCity Maestro SDK - JavaScript

BotCity Maestro SDK - Javascript « Explore Framework docs Summary Summary ?? Computer-vision based UI Automation ?? Getting Started ?? Prerequisites ?

BotCity - Automation for Developers 9 Sep 6, 2022
Temporal-time-utils - This is a library with some reusable functions for Temporal.io TypeScript SDK

temporal-time-utils This is a library with some reusable functions for Temporal.io TypeScript SDK: sleepUntil: sleep to a specific date, instead of by

swyx 15 Oct 18, 2022
Lazerpay SDK allows you accept payments easily in your react application

Lazerpay Official react sdk Lazerpay SDK allows you accept payments easily in your react application Installation npm install lazerpay-react Usage imp

LazerPay 18 Nov 20, 2022
Firebase SDK 9 + Google Sign In + Chrome Extension Manifest Version 3 + Webpack

Firebase SDK 9 + Google Sign In + Chrome Extension Manifest Version 3 + Webpack Demo Find this Chrome Extension Setup and working demo here or on Yout

Rasika Warade 40 Dec 28, 2022
js-sdk for multichain storage service

js-mcs-sdk Table of Contents Introduction Prerequisites MCS API Usage Installation Getting Started Documentation Contributing Introduction A client li

FilSwan 3 Aug 5, 2022
The NodeJS server SDK for Charon.

Charon - NodeJS Server SDK This is the NodeJS server SDK for Charon: A new form of secure, passwordless authentication. The SDK currently serves as a

null 2 Apr 8, 2022
NodeJS(TypeScript) SDK For V2EX

NodeJS(TypeScript) SDK For V2EX

chyroc 4 Mar 2, 2022
This SDK helps developers get started with the on-chain tools provided by Metaplex.

Metaplex JavaScript SDK ⛔️ DO NOT USE IN PRODUCTION, THIS SDK IS IN VERY EARLY ALPHA STAGES! This SDK helps developers get started with the on-chain t

Metaplex Foundation 263 Dec 27, 2022
TypeSafe MongoDB Atlas Data API SDK for Deno & Deno Deploy

Atlas SDK atlas_sdk is a TypeSafe MongoDB Atlas Data API SDK for Deno & Deno Deploy Links Docs Import Replace LATEST_VERSION with current latest versi

Erfan Safari 20 Dec 26, 2022
Autoinspector SDK for nodejs.

Autoinspector Node.js SDK The Autoinspector Node library provides convenient access to the Autoinspector API from applications written in server-side

Autoinspector 2 Jan 27, 2022
Textme.lk SMS SDK and Sample Apps

TextME Javascript SDK Table of Content Introduction Prerequisite Install Getting Started APIs constructor sendSMS viewSMS viewAllSMS Models ClientConf

Iconicto 3 Jan 29, 2022
A production-ready ECPay AIO SDK for Node.js

node-ecpay-aio A production-ready 綠界全方位金流(ECPay All-In-One, AIO) SDK for Node.js with TypeScript Support Documentation 本模組詳細使用說明請見 User Guide Overview

simen 21 Nov 1, 2022