【GraphQL】是当前备受关注的技术,指的是什么?【API】

首先

请问各位听说过GraphQL吗?我之前听过这个词,但直到我开始工作之前,完全没有听说过它具体是什么。

过去,当提到API时,主要是指REST API,但GraphQL具有REST API所没有的许多优点,因此这次我们打算一起总结一下。

REST API的意思是什么呢?

是以表示状态转移(Representational State Transfer,简称REST)为基础的API设计原则。

スクリーンショット 2023-04-04 12.39.09.png

来自Markdown记法备忘单:

GraphQL是什么?

以下摘自Hasura

GraphQL是一种面向API的语言规范。
一般情况下,GraphQL在HTTP上使用,其重要概念是不像为不同资源分配不同的HTTP终端点,而是将“查询”以POST的方式发送到HTTP终端点。

GraphQL 是一个专注于客户端和服务器之间数据查询的语言。

“查询语言是什么?”

“查询”一词指的是”问题”或”询问”的意思。
直译过来,查询即为询问的语言,并且在Google搜索中,输入到搜索框中的字符串也可以看作是一种查询语言。

用了会变得多方便呢?

与以往主流的REST API不同

    • 余計なデータを取得せずに済む

 

    • エンドポイントが1つだけ情報を取得できる

 

    型指定でデータが明確になる

有以下优点!

让我们来实际编写GraphQL吧!

由于只是学习GraphQL的概念并不能说我理解了,所以让我们来写一写吧!这次我们将使用Apollo Server进行实现。

请在任意目录下运行以下命令。

npm i graphql apollo-server -D

[graphql]: 這是用於建立GraphQL模式並執行查詢的庫。
[apollo-server]: 這是Apollo Server的核心庫。
[-D]: 這是在開發環境中安裝時使用的選項。

為了打開開發伺服器,我們稍微修改一下package.json的內容。

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
-  "main": "index.js",
+  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
+   "dev": "node server.js" 
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "apollo-server": "^3.12.0", 
    "graphql": "^16.6.0" 
  }
}

现在让我们开始在server.js中写代码吧!我将在注释中补充关于代码的说明。


const  { ApolloServer, gql } =  require("apollo-server");

// GraphQLスキーマを定義
// どういう風にAPIに対して問合せしているか記述されている
// クライアントはtestというクエリを実行し、0個以上の[Comic]配列を返却します
const typeDefs =  gql`
  type Comic {
    title:String,
    author: String
  }

  type Query {
    test: [Comic]
  }
`;


// データの定義
const comics = [
  {
    title: "チェンソーマン",
    author: "藤本タツキ"
  },
  {
    title: "ドラえもん",
    author: "藤子・F・不二雄"
  },
]


// Resolverの定義
// testといったキーが叩かれたときにレスポンスするものを定義しています
const resolvers = {
  Query:{
    test:() => comics
  }
}

//初期時に、スキーマ・データ・ResolverをApolloサーバーに渡します
const server = new ApolloServer({ typeDefs, resolvers });

server.listen().then(({url}) => {
  console.log(`Server ready at ${url}`)
})


关于Resolver的内容有些复杂,如果您想要了解详情,请参考这里!

 

在写完以上的代码后,通过运行`npm run dev`来实际启动Apollo Server!通过这样,您可以进行GraphQL的测试。

请参考下方图片示例。

点击首页,查询您的服务器。

スクリーンショット 2023-04-10 15.35.49.png

如果想要获取标题和作者,请提供一个选项:

スクリーンショット 2023-04-10 14.42.13.png

如果只需获取标题,则可以这样做

スクリーンショット 2023-04-10 14.42.27.png

正如上述,GraphQL可以只获取所需数据。
这很方便啊!

使用响应数据与React等前端库进行集成,以便进行开发。这种方法被广泛应用。

结束

我打算在不久的将来,根据这段代码使用React制作前端,并写文章将其发布出来。

鉴于我自己是GraphQL的初学者,我将它总结为备忘录。希望这篇文章对你有所帮助。

可以使用以下的方式转述这句话:
请提供参考资料。

GraphQL公式文件
REST API是什么?大致思考一下
Hasura GraphQL入门
GraphQL入门

bannerAds