ソフトウェア開発部バックエンドグループの大木です。
2021年10月にリリースした法人向けサービス GO BUSINESS ではフロント・BFF間にGraphQL、BFF・サーバ間にgRPCを利用しています。
それぞれのファイルアップロード方法について、2回に分けて書いていきます。
GraphQLには multipart/form-data 形式でのファイルアップロード用に Upload 型がビルトインで用意されています。これを使うためには、スキーマに Upload 型を記載する必要があります。
type Mutation {
uploadBusinessidsCsv(input: UploadBusinessidsCsvMutationInput!): UploadBusinessidsCsvMutationPayload!
}
scalar Upload
"""
CSVアップロードリクエスト
"""
input UploadCSVMutationInput {
"アップロードするCSVデータ"
csvData: Upload! # Uploadはnon-nullableにしかできないようで、nullable(Upload)では動作しませんでした
"アップロードの種別"
uploadType: FileUploadType!
}
"""
CSVアップロードレスポンス
"""
type UploadCSVMutationPayload {
"アップロード結果"
uploadOperation: UploadResult!
}
"""
ファイルアップロードの種別
"""
enum FileUploadType {
"ユーザー作成"
CREATE
"ユーザー更新"
UPDATE
}
"""
ファイルアップロードの結果
"""
enum FileUploadType {
"成功"
SUCCESS
"失敗"
FAILED
}
curl localhost:4000/graphql \
-F operations='{ "query": "mutation ($file: Upload!) { singleUpload(file: $file) }", "variables": { "file": null } }' \
-F map='{ "0": ["variables.file"] }' \
-F 0=@a.txt