Insomnia
GitHub概要
Kong/insomnia
The open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.
トピックス
スター履歴
API開発ツール
Insomnia
概要
Insomnia(インソムニア)は、Kong社が開発するシンプルかつ強力なAPIクライアントです。美しく直感的なUIとGraphQL、REST、WebSocket、gRPC、SSEなど幅広いプロトコル対応が特徴で、開発者体験を重視した設計により、API開発とテストのワークフローを大幅に改善できます。
詳細
Insomnia は2016年にGregory Schier氏によって開発された、オープンソースのクロスプラットフォームAPIクライアントです。2019年にKong社が買収し、Kong StudioとしてKongエコシステムの一部として提供されています。Insomniaの最大の特徴は、複数のAPIプロトコルを統一的にサポートしていることです。REST APIはもちろん、GraphQLクエリ、WebSocketリアルタイム通信、gRPCサービス、Server-Sent Events (SSE)まで、現代のAPI開発で必要なあらゆるプロトコルに対応しています。特にGraphQL対応においては、スキーマイントロスペクション、クエリ補完、構文ハイライト、レスポンス検証など、GraphQL開発に特化した機能が充実しています。ストレージオプションとして、ローカル保存、クラウド同期、Gitリポジトリ連携を選択でき、チーム開発での柔軟性を提供しています。Kong買収後は、OpenAPIエディタ、モックサーバー機能、Kong Gatewayとの連携など、エンタープライズ向け機能が大幅に拡張されました。
メリット・デメリット
メリット
- 多様なプロトコル対応: REST、GraphQL、WebSocket、gRPC、SSEまで幅広くサポート
- 優れたGraphQL体験: スキーマ探索、クエリ補完、構文ハイライトが充実
- 美しいUI: 直感的で視覚的に分かりやすいインターフェース設計
- 柔軟なストレージ: ローカル、クラウド、Git連携から選択可能
- オープンソース: 無料で利用でき、カスタマイズも可能
- Kong ecosystem: Kong GatewayやKong Studioとのシームレスな連携
- プラットフォーム対応: Windows、macOS、Linuxで利用可能
デメリット
- 学習コスト: 多機能なため初心者には習得に時間が必要
- メモリ使用量: Electronベースのため動作が重い場合がある
- エンタープライズ機能: 高度な機能は有料プランが必要
- プラグイン少なさ: Postmanと比較するとプラグインエコシステムが限定的
参考ページ
- Insomnia公式サイト
- Kong Insomnia Documentation
- GitHub - Kong/insomnia
- Kong Blog - Insomnia GraphQL Client
- Insomnia Learning Center
書き方の例
基本的なRESTリクエスト
# GET リクエストの設定
GET https://api.example.com/users/{{userId}}
Authorization: Bearer {{accessToken}}
Content-Type: application/json
# 環境変数の設定例
{
"baseUrl": "https://api.example.com",
"accessToken": "your-jwt-token",
"userId": "12345"
}
GraphQLクエリの実行
# GraphQLクエリ例
query GetUserProfile($userId: ID!) {
user(id: $userId) {
id
name
email
posts {
id
title
content
createdAt
}
}
}
# Variables
{
"userId": "user123"
}
# Headers
{
"Authorization": "Bearer {{graphqlToken}}",
"Content-Type": "application/json"
}
WebSocketリアルタイム通信
// WebSocket接続の設定
URL: wss://api.example.com/chat
Headers: {
"Authorization": "Bearer {{wsToken}}"
}
// 送信メッセージ例
{
"type": "message",
"content": "Hello WebSocket!",
"channel": "general"
}
// サブスクリプション例
{
"type": "subscribe",
"channel": "notifications"
}
gRPCサービス呼び出し
// Proto定義ファイルの読み込み
// user.proto の内容例
syntax = "proto3";
service UserService {
rpc GetUser(UserRequest) returns (UserResponse);
rpc CreateUser(CreateUserRequest) returns (UserResponse);
}
message UserRequest {
string user_id = 1;
}
message UserResponse {
string id = 1;
string name = 2;
string email = 3;
}
// gRPCリクエスト例
Method: UserService/GetUser
Message: {
"user_id": "12345"
}
環境とスクリプトの活用
// Pre-request Script例
const timestamp = Date.now();
request.setVariable("timestamp", timestamp);
// JWTトークンの自動取得
if (!request.getVariable("accessToken")) {
const authResponse = await request.send({
url: "{{baseUrl}}/auth/login",
method: "POST",
data: {
username: request.getVariable("username"),
password: request.getVariable("password")
}
});
const token = authResponse.getBody().access_token;
request.setVariable("accessToken", token);
}
// Post-response Script例
const response = insomnia.response.getBody();
if (response.user_id) {
insomnia.environment.set("currentUserId", response.user_id);
}
// レスポンス検証
expect(response.status).to.equal(200);
expect(response.data.email).to.include("@");
Kong Gateway連携
# Kong Service設定例
services:
- name: user-api
url: https://api.example.com
routes:
- name: user-route
service: user-api
paths:
- /api/users
# Insomnia での Kong Gateway経由テスト
GET http://kong-gateway:8000/api/users/{{userId}}
Host: api.example.com
Kong-Debug: 1