本文屬使用Prisma構(gòu)建GraphQL服務(wù)系列羞迷。
概述
服務(wù)定義文件prisma.yml
具有以下根屬性:
-
datamodel
(必須):數(shù)據(jù)庫模型搏恤,關(guān)系蒂萎,枚舉和其他類型的類型定義葡缰。 -
endpoint
:Prisma API的HTTP端點遏插⊙椴校可以省略以提示CLI部署向?qū)А?/li> -
secret
:保護(hù)API端點捞附。 -
schema
:Prism API的GraphQL schema的路徑。 -
subscriptions
:訂閱webhooks的配置您没。 -
seed
:指向包含突變的種子數(shù)據(jù)文件鸟召。 -
custom
:用于提供可在prisma.yml
其他地方引用的變量。
prisma.yml
的精確結(jié)構(gòu)是使用JSON Schema定義的氨鹏∨纺迹可以在這里找到相應(yīng)的Schema定義。
datamodel(必須)
datamodel
指向包含用GraphQL SDL編寫的類型定義的一個或多個.graphql文件仆抵。如果提供多個??文件跟继,CLI將在部署時簡單地拼接它們的內(nèi)容。
類型
datamodel
屬性為一個字符串或一個字符串列表镣丑。
示例
數(shù)據(jù)模型在一個名為types.graphql
的文件中定義舔糖。
datamodel: types.graphql
數(shù)據(jù)模型在兩個名為types.graphql
和enums.graphl
的文件中定義。部署時莺匠,兩個文件的內(nèi)容將通過CLI連接剩盒。
datamodel:
- types.graphql
- enums.graphql
endpoint(可選)
Prisma API的HTTP端點由以下組件組成:
- Prisma server:承載您的Prisma API的服務(wù)器。
- Workspace(僅Prisma Cloud):您通過Prisma Cloud配置的Workspace的名稱慨蛙。
- Service name:Prism API的描述性名稱辽聊。
- Stage: cluster的開發(fā)階段(例如,dev期贫,staging跟匆,prod)。
請注意通砍,endpoint
實際上需要部署您的Prisma API玛臂。但是烤蜕,如果您在運行prisma deploy
之前沒有在prisma.yml
中指定它,CLI將使用向?qū)硖崾灸鷰讉€問題迹冤,并將端點添加到prisma.yml
中讽营。
類型
endpoint
屬性為一個字符串。
示例
1.以下示例端點對此信息進(jìn)行編碼:
-
Prisma server:
localhost:4466
意味著您使用Docker在本地計算機(jī)上部署API(在端口4466上)泡徙。 -
Service name:
default
橱鹏。 -
Stage:
default
。
注意:當(dāng)Service name
和Stage
都設(shè)置為default
時堪藐,它們可以省略莉兰,并由Prisma推斷。這意味著如下示例端點相當(dāng)于:http:// localhost:4466/
endpoint: http://localhost:4466/default/default
2.以下示例端點對此信息進(jìn)行編碼:
-
Prisma server:
eu1.prisma.sh
意味著您使用Prisma Sandbox 部署Prisma API礁竞。 - ** Workspace**:
public-helixgoose-752
是一個隨機(jī)生成的字符串糖荒,用于標(biāo)識Sandbox的Prisma Cloud工作區(qū)。 -
Service name:
myservice
模捂。 -
Stage:
dev
捶朵。
endpoint: https://eu1.prisma.sh/public-helixgoose-752/myservice/dev
3.以下示例端點對此信息進(jìn)行編碼:
-
Prisma server:
http://my-pr-Publi-1GXX8QUZU3T89-413349553.us-east-1.elb.amazonaws.com
意味著您正在使用自定義服務(wù)器來部署您的Prism API。 - ** Workspace**:
public-helixgoose-752
是一個隨機(jī)生成的字符串狂男,用于標(biāo)識Sandbox的Prisma Cloud工作區(qū)综看。 -
Service name:
cat-pictures
。 -
Stage:
prod
并淋。
endpoint: http://my-pr-Publi-1GXX8QUZU3T89-413349553.us-east-1.elb.amazonaws.com/cat-pictures/prod
secret(可選)
secret
用于生成(或簽名)認(rèn)證令牌(JWT)。其中一個身份驗證令牌需要附加到HTTP請求(位于Authorization
頭字段中)珍昨。secret
必須遵守這些要求:
- 必須是utf8編碼的
- 不得包含空格
- 最長不得超過256個字符
請注意县耽,可以在此字符串中編碼多個secret,從而實現(xiàn)平滑的secret旋轉(zhuǎn)镣典。
在這里閱讀更多關(guān)于數(shù)據(jù)庫認(rèn)證兔毙。
警告:如果Prisma API沒有secret部署,它不需要驗證兄春。這意味著每個訪問端點的人都可以發(fā)送任意查詢和突變澎剥,因此可以讀取和寫入數(shù)據(jù)庫!
類型
secret
屬性為一個字符串(不是字符串列表)赶舆。如果你想指定多個secret
哑姚,用逗號分隔(空格被忽略),但仍然是一個字符串值芜茵。
示例
- 定義一個
secret
叙量,其值為moo4ahn3ahb4phein1eingaep
secret: moo4ahn3ahb4phein1eingaep
- 定義3個
secret
,其值分別為myFirstSecret
,SECRET_NUMBER_2
和3rd-secret
九串,注意绞佩,第二個前的空格會被忽略
secret: myFirstSecret, SECRET_NUMBER_2,3rd-secret
- 使用環(huán)境變量寺鸥,其名稱為
MY_SECRET
secret: ${env:MY_SECRET}
subscriptions (訂閱,可選)
subscriptions
屬性用于為您的Prisma服務(wù)定義所有訂閱webhook品山,其需要(至少)兩條信息:
-
subscriptions query
定義應(yīng)在哪個事件中調(diào)用函數(shù)以及payload
的樣子 - 一旦事件發(fā)生胆建,通過HTTP調(diào)用的
webhook
的URL - (可選)附加到發(fā)送到URL的請求的HTTP頭
類型
subscriptions
屬性是具有以下屬性的對象:
-
query
(必須):subscription query
的文件路徑。 -
webhook
(必須):關(guān)于要調(diào)用的webhook的信息(URL和可選的HTTP headers)肘交。如果沒有HTTP headers笆载,則可以直接向該屬性提供URL(請參閱下面的第一個示例)。否則酸些,webhook
會接收另一個具有url
和headers
屬性的對象(請參閱下面的第二個示例)宰译。
示例
- 事件訂閱沒有HTTP headers。
subscriptions:
sendWelcomeEmail:
query: database/subscriptions/sendWelcomeEmail.graphql
webhook: https://bcdeaxokbj.execute-api.eu-west-1.amazonaws.com/dev/sendWelcomeEmail
- 事件訂閱指定兩個HTTP headers魄懂。
subscriptions:
sendWelcomeEmail:
query: database/subscriptions/sendWelcomeEmail.graphql
webhook:
url: https://bcdeaxokbj.execute-api.eu-west-1.amazonaws.com/dev/sendWelcomeEmail
headers:
Authorization: ${env:MY_ENDPOINT_SECRET}
Content-Type: application/json
seed (種子數(shù)據(jù)沿侈,可選)
數(shù)據(jù)庫種子是用測試數(shù)據(jù)(或初始化數(shù)據(jù))填充服務(wù)的標(biāo)準(zhǔn)方式。
類型
seed
屬性為一個對象市栗,具有以下兩個屬性之一:
-
import
:在播種服務(wù)時導(dǎo)入數(shù)據(jù)的說明缀拭。參考兩種文件:- 擁有GraphQL操作的
.graphql
文件路徑 - 或包含以規(guī)范化數(shù)據(jù)格式(Normalized Data Format,NDF)格式的數(shù)據(jù)集的.zip文件的路徑
- 擁有GraphQL操作的
-
run
:在種子服務(wù)時執(zhí)行時的shell命令填帽。這意味著不在導(dǎo)入范圍內(nèi)的更復(fù)雜的種子設(shè)置蛛淋。
注意:目前不支持
run
。請關(guān)注此提議篡腌。
首次部署服務(wù)時褐荷,會隱式執(zhí)行種子(除非使用--no-seed
標(biāo)志顯式禁用)。請關(guān)注請求以獲取其他播種工作的workflows嘹悼。
示例
- 提供包含種子突變的
.graphql
文件:
seed:
import: database/seed.graphql
- 使用NDF中的數(shù)據(jù)集引用.zip文件:
seed:
import: database/backup.zip
- 播種時運行node腳本:
seed:
run: node script.js
custom (自定義叛甫,可選)
custom
屬性可以讓你指定任何你想在你的prisma.yml其他地方重用的值。因此它沒有預(yù)定義的結(jié)構(gòu)杨伙。您可以使用帶有self variable source的變量來引用值其监,例如:$ {self:custom.myVariable}。
類型
custom
屬性為一個對象限匣。沒有對此對象的具體要求抖苦。
示例
定義兩個custom
值并在subscriptions
的定義中重新使用它們。
custom:
serverlessEndpoint: https://bcdeaxokbj.execute-api.eu-west-1.amazonaws.com/dev
subscriptionQueries: database/subscriptions/
subscriptions:
sendWelcomeEmail:
query: ${self:custom.subscriptionQueries}/sendWelcomeEmail.graphql
webhook: https://${self:custom.serverlessEndpoint}/sendWelcomeEmail
hooks (鉤子米死,可選)
hooks
屬性用于定義在特定命令之前或之后由Prisma CLI執(zhí)行的終端命令锌历。
當(dāng)前可用的鉤子如下:
-
post-deploy
:將在prisma deploy
命令后調(diào)用,即部署后調(diào)用峦筒。
類型
hooks
屬性為一個對象辩涝。這些屬性與當(dāng)前可用的鉤子的名稱相匹配。
示例
以下是在執(zhí)行prisma deploy
后執(zhí)行三項任務(wù)的示例:
- 輸出
Deployment finished
- 下載
.graphqlconfig.yml
中指定的db
項目的GraphQL schema - 調(diào)用
.graphqlconfig.yml
中指定的代碼生成
hooks:
post-deploy:
- echo "Deployment finished"
- graphql get-schema --project db
- graphql prepare
請注意勘天,此設(shè)置假定.graphqlconfig.yml
的有如下代碼:
projects:
prisma:
schemaPath: generated/prisma.graphql
extensions:
prisma: prisma.yml
prepare-binding:
output: generated/prisma.ts
generator: prisma-ts