👓

ColdFusionでGraphQLを使ってみる

2023/04/30に公開

定期的にColdFusion関連の記事を書いているmikoです。

次期バージョンのColdFusion Fortunaを少し触ってみたので、少しずつ紹介していきます。

ColdFusion Fortunaについて

「ColdFusion 2023」となるかは不明ですが、
コードネームは「Fortuna」らしく、古代ローマの運命の女神の名前らしいです。

(追加された機能が気になる方は、以下のサイトからオープンベータに参加して色々と試してみましょう)
https://www.adobeprerelease.com/beta/48C2D737-9CB4-445E-E39C-90CB6381919A

GraphQL Client を使ってみる

残念ながらColdFusion Fortunaで追加されるのは、
GraphQL API Serverではなく、GraphQL Clientです。

なので、試すにはGraphQL API Serverは、別途用意する必要があります。

ですが、以下の記事を参考にすれば、すぐに準備できるのでやってみましょう!
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-graphql-api-server-in-node-js

作成したコード
import express from 'express'
import cors from 'cors'
import { graphqlHTTP } from 'express-graphql'
import { makeExecutableSchema } from '@graphql-tools/schema'

const app = express()
const port = 4000

const data = {
  users: [
    { id: '001', name: 'Tanaka' },
    { id: '002', name: 'Miko' },
  ],
}

// Schema
const typeDefs = `
type User {
  id: ID!
  name: String!
}

type Query {
  users: [User]
}
`

const resolvers = {
  Query: {
    users: (obj, args, context) => context.users,
  },
}

const executableSchema = makeExecutableSchema({
  typeDefs,
  resolvers,
})

app.use(cors())
app.use(express.json())
app.use(express.urlencoded({ extended: true }))

// Entrypoint
app.use(
  '/graphql',
  graphqlHTTP({
    schema: executableSchema,
    context: data,
    graphiql: true,
  })
)

app.listen(port, () => {
  console.log(`Running a server at http://localhost:${port}`)
})

ちゃんと動いているか確認しておきましょう。

かなり前にNew Relicでアレコレしていた時に、GraphQLとトモダチになれた気がしましたが、
久々に触ってみると「どうクエリ書くんやっけ・・・???」って混乱しました。

それと、ColdFusion側ではパッケージ「graphqlclient」をインストールしておきましょう。

実際に使ってみる

以下のコードで取得できます。

<cfscript>
gqlClient = getGraphQLClient({
  server_URL : "http://localhost:4000/graphql",
  "raw_http_client" : true
});

gql = "
query {
  users {
    id
    name
  }
}
";

response = gqlClient.fetchResponse(gql, {});
writeDump(response);
</cfscript>

まとめ

少しずつ触れる機会が増えてきた(気がする)GraphQL、
勉強する機会がなかったので色々と触ってみようと思います。

コラボスタイル Developers

Discussion