GraphQL服务器的组成要素
由于使用了Next.js + 服务器端TypeScript + 函数风格,我创建了一个干净的应用程序,因此在2022年的 Advent Calendar 的第12天,我想要写一些实现意图等内容。我是在mofmof公司工作的shwld。
昨天写了关于仓库层的内容。
構成GraphQL服务器的组成要素
GraphQL的服务器端实现主要是使用@graphql-codegen和The Guild的许多工具进行实现。
虽然我们正在尝试各种方法,但我还没有找到这个是最好的!这让我有些试验性的感觉。
使用的软件包如下。
下一个.js
这是一个用于在Next.js的API路由中使用的软件包。
GraphQL瑜伽
这是一个GraphQL服务器。服务端本身使用了Next.js的API路由,不使用其他库比如fastify。
GraphQL Envelop (GraphQL 信封)
我正在使用Yoga进行扩展。
我正在使用Yoga来实现Context和Logger等功能。
GraphQL 解析器
GraphQL的解析器与Next.js分层分离。
此外,业务层不被分割,将GraphQL解析器视为业务层。
以下是用于创建解析器的软件包。
@envelop/通用认证
-
- コンテキストとして受け取ったユーザーを認証する
- ユーザーが存在しない場合にどうするかなどまだ、ちゃんと設定できてない
@graphql-codegen -> GraphQL 代码生成
- GraphQLのschemaからリゾルバの型を生成するために使っています
为了结构化和模块化整理,我们也尝试了GraphQL模块,但由于它使用fs来导入文件的规格,我们不喜欢这种方式,所以没有使用它。
const executableSchema = makeExecutableSchema<GraphqlServerContext>({
typeDefs,
resolvers: merge.all<Resolvers<GraphqlServerContext>>([
userProfileModule.resolvers,
storyModule.resolvers,
projectModule.resolvers,
accountModule.resolvers,
viewerModule.resolvers,
]),
});
使用情境:抽屜式日歷/角色解析器/程式碼路徑:/advent-calendar/use-cases/graphql-resolvers/src/index.ts
祖德
- バリデーションライブラリ
GraphQL Shield(图灵机器人)
-
- これでやっているのはログインしてるかどうかのチェックのみで、細かい認可制御は別でやっています
- これいらないかもなーとか思ったりしなくもない。理由はGraphQL Middlewareの項で
GraphQL中间件
-
- GraphQLShieldを利用するために使っています。
-
- Middlewareを使うとレイヤー化を促進しますが、個人的にはGraphQL全体を責務でスライスするよりも、feature単位でスライスしたくて、あんまり好みとは合わない気がしています。
- はがそうかなーと思っています。
graphql-relay
GraphQL-Relay (GraphQL中继)
-
- relay styleのページネーションを実装するためだけに使っています。
- 後日このカレンダーで記事にします。
下次告知
明天,我将写关于GraphQL解析器目录结构的内容。