概要
GraphQLの仕様ではエラーにextention
という領域があり、柔軟に項目が設定できます。(詳細についてはGraphQLのエラー設計についてを参照)
では、PythonでGraphQLサーバーを実装するときに、このextentionをどう設定する実装が良いのか、というメモ書きです。
対応案
実装のやり方は色々あると思いますが、こちらのstackoverflowの記事で紹介されている通り、graphql-core
のライブラリにある、GraphQLErrorのextensionに設定するやり方が良いかなと思います。ドキュメントについてはGraphQL Errorsにあります。
なお、上記のstackoverflowの記事ではGrapheneを使用する際の例で紹介されていますが、graphql-core自体はStrawberryやAriadneでも使用されているようですので、大体のライブラリで使えるエラーの実装と思います。
前提
以下の前提で試しに実装してみました。
- 使用したpythonのバージョンは
3.12.2
です。 - 使用したgraphql-coreのバージョンは
3.2.3
です。 - graphqlのライブラリとして今回はStrawberryを使用してみました。
実装サンプル
@strawberry.type
class Mutation:
@strawberry.mutation
def add_sample_user(email: str, name: str) -> AddUserResponse:
# execの処理内容は記載割愛
result, is_success = add_sample_user_exec(email: str, name: str)
if is_success:
return result
else:
# Errorにextensionを設定する
return GraphQLError(message="Failed exec add user", extensions={"code": 500})