Stezzenの宣言的アプローチを用いた生産準備型GraphSQL APIの構築


もともとルチアCerchieで投稿StepZen's blog
APIを作成するために書くコードは、そのAPIを実行、管理、維持するために必要なコードです.Why StepZen
GraphSQL APIを生産に配備することは、あなたのAPIの特定の面をどう扱うかを慎重に考慮することです.また、変更を管理する方法を計画することを意味しますデータソースの追加と操作.
StepZenを使用すると、GraphSQL APIを作成するコードを記述しますamounts to the code you write to run そして、生産であなたのAPIを管理してください.並列性はビルトインであり、ページ化は設定可能であり、バックエンド、パラメータ、クエリ、および突然変異を追加または変更することはカスタムディレクティブにおけるスリップの問題である.エンドポイントはAPIキーで既定で保護され、JWTベースの保護は設定可能です.スキーマとリゾルバは自動生成されますので、それらを書く必要はありません.そして、その結果、Stezenは、パフォーマンスの最適化を内蔵しています.あなたのAPIを生産するためにこのスキーマベースのアプローチをより深く見てみましょう.

応答時間を高速化


迅速な応答時間はすべての生産準備APIのために最適です.GraphSQLリクエストの内部処理では、単一のリクエストで複数のバックエンドを呼び出すことができます.Stezzenのサービスは、これらのバックエンドリクエストのどれが並列に行われるかを認識し、他のリクエストに依存している.つまり、TestZenは、可能な場合に自動的にクエリの実行を並列化し、応答時間を短縮します.

バックエンドの追加と変更


GraphSQL APIをプロダクションに配置する前に、データソースの要求に従ってバックエンドを接続したい場合もありますが、フロントエンドの変更の必要がある場合や、新しいCMSやデータベースを統合する場合には、プロダクションに展開した後にバックエンドを変更することもできます.新しいバックエンドをStezenと接続するには、Stezzen CLIから単一のコマンドを実行できます.たとえば、残りのバックエンドを追加するには、次のように実行します.
stepzen import curl "https://introspection.apis.stepzen.com/customers"
このコマンドを貼り付けることができますし、お使いのマシンで試してみてください!提供するsigned up for StepZen and downloaded the CLIこのコマンドは、残りのエンドポイントをイントロスペクションし、スキーマを生成します.スキーマでは、この方法で書かれたクエリを見ることができます.
type Query {
  myQuery: RootEntry
    @rest(
      endpoint: "https://introspection.apis.stepzen.com/customers"
      headers: [{ name: "Content-Type", value: "$Content-Type;" }]
      configuration: "json_introspection_config"
    )
}
見ることができるように、内省のスキーマの中で、カスタムディレクティブ@rest 残りのエンドポイントでポイントZenzenだけでなく、対応する引数を介してヘッダーと設定の詳細を設定します.このように、Stezenはレゾルバを書く仕事を排除して、残りの終点に接続する.
SQLやNoSQLデータベース、あるいは別のGraphSQL APIのような別のデータソースを接続するには、stepzen import コマンドも.例の通りstepzen import curl , Stezenはデータベースのバックエンドを内省し、スキーマとリゾルバを自動生成します.これらのコマンドによって生成されるスキーマは、カスタムを含みます@dbquery and @graphql スキーマ内からバックエンドに接続するディレクティブ.
複数のエンドポイントからデータを結合することができます.@materializer . 以下に例を示します@materializer インアクション
type GetCustomer {
  address: Address
  email: String
  id: Int
  name: String
  orders: [Order]
    @materializer(
      query: "getOrderListByCustomerId"
      arguments: [{ name: "customerId", field: "id" }]
    )
}
こちらです.@materializer is feeding results from a query to a separate databaseGetCustomer 種類繰り返しますが、レゾルバは必要ありません.

設定可能なページネーション


生産準備APIは、必要に応じてページ付けを含んでいます.あなたの条件の残りのAPI上でページを追加することによってページネーションを設定することができますpagination への引数@rest ディレクティブ.The type ページの種類(ページ番号、オフセット、カーソル)を決定しますsetters 値は、結果/ページの総数を決定します.
 type Query {
  getPaginatedCustomerList(first: Int!, after: Int!): CustomerConnection
    @rest(
      endpoint: "https://introspection.apis.stepzen.com/customers?limit=$first&offset=$after"
      pagination: {
        type: PAGE_NUMBER
        setters: [{ field: "total", path: "total_pages" }]
      }
    )
}

エンドポイント保護


GraphSQL APIを展開する他の方法では、graphql-shield 適切にAPIを保護するために.Stezzenでは、エンドポイントはAPIキーで既定で保護されます.JWTベースの保護を追加したい場合は、このようなコードを設定ファイルに追加できます.
deployment:
  identity:
    keys:
      - algorithm: HS256
        key: my-little-secret

[... other configuration]

- rootoperationtype: Query
  privatefieldspredicate: "?jwt"
認証を追加する方法を学ぶにはtake a look at StepZen’s docs .

ここからどこへ行くか


最後に、PageZenは、Paginationとバックエンドの追加と接続に関してあなたのGraphql APIを作成するためのしっかりした選択です、そして、パフォーマンスと終点保護のために平行に関して、それを維持するためにも.Stezenのカスタムディレクションと便利なCLIツーリングは、あなたのGraphics APIを生産のための形に滑らかにするプロセスを作ります.
あなたがStezenで始めることについての質問があるならば、consult our docs . Or hop into Discord , 私たちはあなたにそこで会いたい.