🦕

シンプルなHTTPクライアントky

2024/06/28に公開

こういうシンプルなライブラリが好きなので紹介して行こうと思います。

kyとは

ブラウザ、Node.js、Denoをサポートしているfetchをベースにした小さくシンプルなHTTPクライアントです。

リポジトリ

https://github.com/sindresorhus/ky

インストール

npm install ky

npm

import ky from 'https://esm.sh/ky';

deno

使い方

import ky from 'ky';

const json = await ky.post('https://example.com', {json: {foo: true}}).json();

console.log(json);

postでリクエストを行う例です。
post以外もget,put,patch,head,deleteが同じように使えます

prefix

import ky from 'ky';

// On https://example.com

const response = await ky('unicorn', {prefixUrl: '/api'});
//=> 'https://example.com/api/unicorn'

const response2 = await ky('unicorn', {prefixUrl: 'https://cats.com'});

相対URL、絶対URLのいずれかを指定できます。

const api = ky.create({prefixUrl: 'https://cats.com'});

またcreate関数を使いオプションをデフォルトにすることもできます。

レスポンスが200以外

try {
	await ky('https://example.com').json();
} catch (error) {
	if (error.name === 'HTTPError') {
		const errorJson = await error.response.json();
	}
}

レスポンスが200系以外の場合は全てエラーがthrowされるのでtry catchしてやる必要があります。

hook

import ky from 'ky';

const api = ky.extend({
	hooks: {
		beforeRequest: [
			request => {
				request.headers.set('X-Requested-With', 'ky');
			}
		]
	}
});

const response = await api.get('https://example.com/api/users');

このようにhookを使えばリクエスト直前にリクエストを変更を行ったりなどできます。
その他hookは

  • beforeError
    • エラーのあとに実行される
  • beforeRetry
    • リトライ直前に実行される
  • afterResponse
    • responseが返ってきたあとに実行される

がありあます。

json

import ky from 'ky';
import bourne from '@hapijs/bourne';

const json = await ky('https://example.com', {
	parseJson: text => bourne(text)
}).json();

プロトタイプ汚染対策のためjsonは別パッケージ経由でパースを行うようです。

import ky from 'ky';
const json = await ky('https://example.com', {
	stringifyJson: data => JSON.stringify(data, (key, value) => {
		return value;
	})
}).json();

文字列にするにはstringifyを使って行います。

まとめ

個人的に小さめのアプリならuseQueryなどfetchするhooksのライブラリの中で使うならこういうシンプルなライブラリを使うのはありかなと思いました。

GitHubで編集を提案
SMARTCAMP Engineer Blog

Discussion