を使用してAPIを作成する


何?


さて、これは私に関連しています.だから私はあなたの周りを見に行くことをお勧めします😊.
そこで、ここではRKKkitを使用してユーザ管理システムでGraphSQL APIを作成する方法の具体的な例を示します.

しかし最初に:rakkitのインストール💾


したがって、依存しないようにインストールする必要があります.

Here, I would use apollo-server but it's also possible to install apollo-server-koa if you use Rakkit for REST and GraphQL which allows you to link contexts.


必要な依存関係をインストールするには、このコマンドを実行します.
npm i rakkit graphql @types/graphql apollo-server reflect-metadata

reflect-metadata allows us to use the decorators with TypeScript


クールなので、今では設定を設定する必要があります.プロジェクトのルートにあるJSONファイルです.
{
  "compileOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "module": "commonjs",
    "target": "es2016",
    "noImplicitAny": false,
    "sourceMap": true,
    "outDir": "build",
    "declaration": true,
    "importHelpers": true,
    "forceConsistentCasingInFileNames": true,
    "lib": [
      "es2016",
      "esnext.asyncitable"
    ],
    "moduleResolution": "node"
  }
}
//設定できます.JSON

型の定義🚻


それでは、Userクラスを作成することから始めましょう.
import { ObjectType, Field } from "rakkit";
import * as Crypto from "crypto";

@ObjectType()
export class User {
  @Field()
  username: string;

  @Field()
  email: string;

  @Field()
  id: string;

  // Just to show a computed property:
  @Field(type => String)
  get flatInfos(): string {
    return [this.name, this.email, this.id].join(":");
  }

  constructor(username: string, email: string) {
    this.username = username;
    this.email = email;
    this.id = Crypto.randomBytes(16).toString("hex");
  }
}
/types/userTS

小さな「データベース」が必要です🗂


それで、我々は我々のアプリをテストするために一部のユーザーと遊ぶ必要があるので、私はちょうどそれをより明確にするためにユーザーインスタンスのリストを作成するつもりです:

You can use a real database with an ORM like TypeORM for your projects


import { User } from "../types/User";

export const users = [
  new User("JohnDoe", "[email protected]"),
  new User("JaneDoe", "[email protected]"),
  new User("Ben", "[email protected]")
];
/db/userTS

リゾルバ(クエリ,突然変異,サブスクリプション)🚀


次のクラスで問い合わせ/突然変異/サブスクリプションを定義します.単純なCRUDとユーザが登録されたときに通知されるサブスクリプションが含まれます.
import {
  Resolve,
  Query,
  Mutation,
  Subscription,
  IContext,
  Arg
} from "rakkit";
import { User } from "../types/User";
import { users } from "../db/users";

@Resolver()
export class UserResolver {
  @Query(returns => [User])
  getAllUsers() { {
    return users;
  }

  @Query({ nullable: true })
  getOneUserByName(@Arg("name") name: string): User {
    return users.find((user) => user.name ==== name);
  }

  @Mutation()
  addUser(
    // Defining the mutation arguments
    @Arg("name") name: string,
    @Arg("email") email: string,
    context: IContext
  ): User {
    const user = new User(name, email);
    users.push(user);
    // Publish the event for subscriptions with the created user
    context.gql.pubSub.publish("USER_ADDED", user);
    return user;
  }

  @Subscription({ topics: "USER_ADDED" })
  userAddedNotif(createdUser: User): User {
    // Send the created user to the client
    return createdUser;
  }
}
/resolver/userresolver .TS

参入先🚪


では、アプリケーションのエントリポイントが必要です.
// It allows us to use decorators:
import "reflect-metadata";

import { Rakkit } from "rakkit";
import { ApolloServer } from "apollo-server";

async function bootstrap() {
  await Rakkit.start({
    gql: {
      // You give an array of glob string:
      resolvers: [`${__dirname}/resolvers/*Resolver.ts`]
    }
  });
  // Retrieve the GraphQL compiled schema:
  const schema = Rakkit.MetadataStorage.Gql.Schema;

  const server = new ApolloServer({
    schema
  });

  server.listen();
}

bootstrap();
ブートストラップTS

ので、開始し、それをテストしましょう!🎉


それを起動するには、あなたのTypesScriptアプリケーションを直接実行するために、@ObjectType()をインストールする必要があります.
npm i -g ts-node
次のコマンドを実行します.
ts-node relative-path-to/bootstrap.ts
そしてちょうどあなたのお気に入りのブラウザでhttp://localhost:4000にいくつかのGraphSQLのクエリを行うに行く!🔥
getallusers -すべてのユーザを取得する

getoneuserbyname -特定のユーザを名前で取得する

adduser -ユーザを追加する

useraddednotif -ユーザー生成イベントを聞きます.

ET Vil il!この例はGithubで利用可能です😊, ありがとう