Pylon
Pylon を使用した GraphQL API の構築は、シンプルで簡単です。Pylon は Hono 上に構築されたバックエンドフレームワークであり、コードファーストの GraphQL API 開発を提供します。
GraphQL スキーマは、TypeScript 定義からリアルタイムで生成されるため、サービスロジックの記述に集中できます。このアプローチにより、開発速度が大幅に向上し、型安全性が高まり、エラーが減少します。
コードの破壊的な変更は、API に即座に反映されるため、変更が機能にどのように影響するかをすぐに確認できます。
詳細については、Pylonをご覧ください。
新しい Pylon サービスの設定
Pylon を使用すると、npm create pylon
コマンドを使用して新しいサービスを作成できます。このコマンドは、基本的なプロジェクト構造と構成を持つ新しい Pylon プロジェクトを作成します。セットアッププロセス中に、Bun、Node.js、または Cloudflare Workers などの優先するランタイムを選択できます。
このガイドでは、Bun ランタイムを使用します。
新しいプロジェクトの作成
新しい Pylon プロジェクトを作成するには、次のコマンドを実行します。
npm create pylon my-pylon@latest
これにより、基本的な Pylon プロジェクト構造を持つmy-pylon
という新しいディレクトリが作成されます。
プロジェクト構造
Pylon プロジェクトは、次のように構成されています。
my-pylon/
├── .pylon/
├── src/
│ ├── index.ts
├── package.json
├── tsconfig.json
.pylon/
: プロジェクトの production ビルドが含まれます。src/
: プロジェクトのソースコードが含まれます。src/index.ts
: Pylon サービスのエントリポイントです。package.json
: npm パッケージの設定ファイルです。tsconfig.json
: TypeScript の設定ファイルです。
基本的な例
基本的な Pylon サービスの例を以下に示します。
import { app } from '@getcronit/pylon'
export const graphql = {
Query: {
sum: (a: number, b: number) => a + b,
},
Mutation: {
divide: (a: number, b: number) => a / b,
},
}
export default app
API のセキュリティ保護
Pylon は、クラウドネイティブな ID とアクセス管理ソリューションである ZITADEL と統合して、API の安全な認証と承認を提供します。 ZITADEL のドキュメントに記載されている手順に従うことで、Pylon API を簡単に保護できます。
より複雑な API の作成
Pylon を使用すると、リアルタイムスキーマ生成機能を活用して、より複雑な API を作成できます。サポートされている TypeScript 型と API の定義方法の詳細については、Pylon のドキュメントを参照してください。
この例では、Pylon で複雑な型とサービスを定義する方法を示します。TypeScript のクラスとメソッドを活用することで、データベース、外部サービス、その他のリソースと対話する強力な API を作成できます。
import { app } from '@getcronit/pylon'
class Post {
id: string
title: string
constructor(id: string, title: string) {
this.id = id
this.title = title
}
}
class User {
id: string
name: string
constructor(id: string, name: string) {
this.id = id
this.name = name
}
static async getById(id: string): Promise<User> {
// Fetch user data from the database
return new User(id, 'John Doe')
}
async posts(): Promise<Post[]> {
// Fetch posts for this user from the database
return [new Post('1', 'Hello, world!')]
}
async $createPost(title: string, content: string): Promise<Post> {
// Create a new post for this user in the database
return new Post('2', title)
}
}
export const graphql = {
Query: {
user: User.getById,
},
Mutation: {
createPost: (userId: string, title: string, content: string) => {
const user = User.getById(userId)
return user.$createPost(title, content)
},
},
}
export default app
API の呼び出し
Pylon API は、任意の GraphQL クライアントライブラリを使用して呼び出すことができます。開発目的では、リアルタイムで API と対話できる Web ベースの GraphQL IDE である Pylon Playground を使用することをお勧めします。
- プロジェクトディレクトリで
bun run dev
を実行して、Pylon サーバーを起動します。 http://localhost:3000/graphql
に移動して、ブラウザで Pylon Playground を開きます。- 左側のペインに GraphQL クエリまたはミューテーションを記述します。
Hono コンテキストへのアクセス
getContext
関数を使用することで、コード内のどこからでも Hono コンテキストにアクセスできます。この関数は、リクエスト、レスポンス、その他のコンテキスト固有のデータに関する情報を含む現在のコンテキストオブジェクトを返します。
import { app, getContext } from '@getcronit/pylon'
export const graphql = {
Query: {
hello: () => {
const context = getContext()
return `Hello, ${context.req.headers.get('user-agent')}`
},
},
}
export default app
Hono コンテキストオブジェクトとそのプロパティの詳細については、Hono のドキュメントとPylon のドキュメントを参照してください。
Hono の役割
Pylon は、Web アプリケーションと API を構築するための軽量な Web フレームワークである Hono 上に構築されています。Hono は HTTP リクエストとレスポンスを処理するためのコア機能を提供し、Pylon は GraphQL API 開発をサポートするようにこの機能を拡張します。
GraphQL の他に、Pylon では基盤となる Hono アプリインスタンスにアクセスして、カスタムルートとミドルウェアを追加することもできます。これにより、Hono の全機能を活用したより複雑な API とサービスを構築できます。
import { app } from '@getcronit/pylon'
export const graphql = {
Query: {
sum: (a: number, b: number) => a + b,
},
Mutation: {
divide: (a: number, b: number) => a / b,
},
}
// Add a custom route to the Pylon app
app.get('/hello', (ctx, next) => {
return new Response('Hello, world!')
})
結論
Pylon は、GraphQL API の開発を簡素化する強力な Web フレームワークです。TypeScript 型定義を活用することで、Pylon はリアルタイムスキーマ生成を提供し、型安全性とエラーの削減を実現します。Pylon を使用すると、ビジネス要件を満たす安全でスケーラブルな API を迅速に構築できます。Hono との Pylon の統合により、GraphQL API 開発に集中しながら、Hono のすべての機能を使用できます。
Pylon の詳細については、公式ドキュメントをご覧ください。