如何將 Apollo 與 Deno 搭配使用
Apollo Server 是一個 GraphQL 伺服器,你可以在幾分鐘內設定好並與現有的資料來源(或 REST API)一起使用。然後,你可以將任何 GraphQL 應用程式連接到它以接收資料,並利用 GraphQL 的好處,例如類型檢查和高效擷取。
我們將建立一個簡單的 Apollo 伺服器並執行,它將允許我們查詢一些本機資料。我們只需要三個檔案
schema.ts
來設定我們的資料模型resolvers.ts
來設定我們將如何填入架構中資料欄位的資料- 我們的
main.ts
,伺服器將在此啟動
我們將從建立它們開始
touch schema.ts resolvers.ts main.ts
讓我們逐步設定每個檔案。
schema.ts
我們的 schema.ts
檔案描述我們的資料。在這個案例中,我們的資料是一個恐龍清單。我們希望我們的使用者能夠取得每個恐龍的名稱和簡短說明。在 GraphQL 語言中,這表示 Dinosaur
是我們的**類型**,而 name
和 description
是我們的**欄位**。我們也可以定義每個欄位的資料類型。在這個案例中,兩者都是字串。
這也是我們使用 GraphQL 中的特殊**查詢**類型來描述我們允許的資料查詢的地方。我們有兩個查詢
dinosaurs
取得所有恐龍的清單dinosaur
將恐龍的name
作為引數,並傳回關於該種類恐龍的資訊。
我們將在我們的 typeDefs
類型定義變數中匯出所有這些
export const typeDefs = `
type Dinosaur {
name: String
description: String
}
type Query {
dinosaurs: [Dinosaur]
dinosaur(name: String): Dinosaur
}
`;
如果我們想要寫入資料,這也是我們將描述**突變**的地方。突變是你使用 GraphQL 寫入資料的方式。由於我們在此使用靜態資料集,我們不會寫入任何內容。
resolvers.ts
解析器負責填入每個查詢的資料。在此,我們有恐龍清單,而解析器將執行以下任一動作:a) 如果使用者要求dinosaurs
查詢,則將整個清單傳遞給用戶端,或 b) 如果使用者要求dinosaur
查詢,則只傳遞一個。
const dinosaurs = [
{
name: "Aardonyx",
description: "An early stage in the evolution of sauropods.",
},
{
name: "Abelisaurus",
description: '"Abel\'s lizard" has been reconstructed from a single skull.',
},
];
export const resolvers = {
Query: {
dinosaurs: () => dinosaurs,
dinosaur: (_: any, args: any) => {
return dinosaurs.find((dinosaur) => dinosaur.name === args.name);
},
},
};
後者會將用戶端的參數傳遞到函式中,以將名稱與資料集中的名稱配對。
main.ts
在我們的main.ts
中,我們將從 schema 和解析器匯入ApolloServer
、graphql
以及我們的typeDefs
import { ApolloServer } from "npm:@apollo/server@^4.1";
import { startStandaloneServer } from "npm:@apollo/server@4.1/standalone";
import { graphql } from "npm:graphql@16.6";
import { typeDefs } from "./schema.ts";
import { resolvers } from "./resolvers.ts";
const server = new ApolloServer({
typeDefs,
resolvers,
});
const { url } = await startStandaloneServer(server, {
listen: { port: 8000 },
});
console.log(`Server running on: ${url}`);
我們將我們的typeDefs
和resolvers
傳遞給ApolloServer
以啟動新伺服器。最後,startStandaloneServer
是一個輔助函式,可快速啟動並執行伺服器。
執行伺服器
現在,剩下的就是執行伺服器
deno run --allow-net --allow-read --allow-env main.ts
您應該在終端機中看到Server running on: 127.0.0.1:8000
。如果您前往該地址,您將看到 Apollo 沙盒,我們可以在其中輸入我們的dinosaurs
查詢
query {
dinosaurs {
name
description
}
}
這將傳回我們的資料集
{
"data": {
"dinosaurs": [
{
"name": "Aardonyx",
"description": "An early stage in the evolution of sauropods."
},
{
"name": "Abelisaurus",
"description": "\"Abel's lizard\" has been reconstructed from a single skull."
}
]
}
}
或者,如果我們只想要一個dinosaur
query {
dinosaur(name:"Aardonyx") {
name
description
}
}
會傳回
{
"data": {
"dinosaur": {
"name": "Aardonyx",
"description": "An early stage in the evolution of sauropods."
}
}
}
太棒了!