🦕
シンプルなHTTPクライアントky
こういうシンプルなライブラリが好きなので紹介して行こうと思います。
kyとは
ブラウザ、Node.js、Denoをサポートしているfetch
をベースにした小さくシンプルなHTTPクライアントです。
リポジトリ
インストール
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のライブラリの中で使うならこういうシンプルなライブラリを使うのはありかなと思いました。
Discussion