- 概要
- GraphQL エラーを検出する
- 一般的な GraphQL エラーメッセージ
- Authorization Error
- Data Integrity or Validation Error
- Internal Error
- Internal server error
- JobIdentifierInput must specify one of indeedJobKey, employerJobId, or atsApplicationIdentifier
- JobSeekerIdentifierInput must specify either indeedJobSeekerKey or emailAddress
- PartnerDispositionIdentifierInput must specify one of indeedApplyID, ittk, universalApplyId, or alternateIdentifier
- Unable to parse statusChangeDateTime
- Validation errors in batch requests
- Variable input has an invalid value error
- 一般的な GraphQL エラーコード
- BAD_USER_INPUT error
- FORBIDDEN error
- GRAPHQL_PARSE_FAILED error
- HTTP ステータスコード
GraphQL エラーをトラブルシューティングする
GraphQL エラーをトラブルシューティングします。
概要
GraphQL エラーをトラブルシューティングする方法について説明します。
GraphQL にアクセスする前に発生する可能性がある OAuth エラーのトラブルシューティングについては、OAuth エラーをトラブルシューティングするを参照してください。
GraphQL を初めて利用する場合は、Apollo Odyssey: GraphQL Tutorials と、GraphQL specification の Errors を参照してください。
GraphQL エラーを検出する
エラーを検出するには、HTTP ステータスコードと結果内の errors 配列を確認します。
HTTP ステータスコードが 200 でも、errors 配列が存在する場合はエラーが発生しています。
errors 配列には、エラーを説明する message フィールドと、エラーの code および classification を含む extensions が含まれます。次の例を参照してください。
{ "errors": [{ "message": "Description of error", "path": ["Path"], "extensions": { "code": "BAD_USER_INPUT", "classification": { "type": "ExtendedValidationError", "validatedPath": [ "patchEmployer", "input", "employerAttributes", "countrySpecificAttributes", 0, "websiteUrl" ], "constraint": "@DossierUrlConstraint" }, "serviceName": "company-data-api", "stacktrace": [ "Stack trace" ] } }], "data": { "patchEmployer": null }}各値の意味は次のとおりです。
| 値 | 説明 |
|---|---|
errors.message | エラーを説明するメッセージです。 一般的な GraphQL エラーメッセージを参照してください。 例: |
errors.path | エラーが発生したパスです。 例: |
errors.extensions | デバッグ用のフィールドです。 |
errors.extensions.code | エラーコードです。一般的な GraphQL エラーコードを参照してください。 |
errors.extensions.code.validatedPath | 問題の原因となったフィールドへのパスです。 |
errors.extensions.code.constraint | エラーの原因となったスキーマ内の制約です。 |
errors.extensions.classification | フィールド制約によるエラーの詳細です。 |
一般的な GraphQL エラーメッセージ
リクエストが失敗すると、data フィールドは null になり、errors フィールドに問題の内容が含まれます。
errors フィールドには、message フィールドと code フィールド、およびその他のフィールドが含まれます。
一般的なエラーメッセージは次のとおりです。
- Authorization Error
- Data Integrity or Validation Error
- Internal Error
- Internal server error
- JobIdentifierInput must specify one of indeedJobKey, employerJobId, or atsApplicationIdentifier
- JobSeekerIdentifierInput must specify either indeedJobSeekerKey or emailAddress
- PartnerDispositionIdentifierInput must specify one of indeedApplyID, ittk, universalApplyId, or alternateIdentifier
- Unable to parse statusChangeDateTime
- Validation errors in batch requests
- Variable input has an invalid value error
一般的な GraphQL エラーコードと Built-in error codes も参照してください。
Authorization Error
message | Authorization Error |
|---|---|
| 概要 | さまざまな理由で発生する可能性があります。Indeed はこのエラーを厳密に監視しています。 詳細については、Indeed にお問い合わせください。 |
Data Integrity or Validation Error
message | Data Integrity or Validation Error |
|---|---|
| 概要 | API への入力として渡したフィールドを正常に処理できない場合に発生することがあります。 入力値が有効であることを確認してください。問題が続く場合は、Indeed にお問い合わせください。 |
Internal Error
message | Internal Error |
|---|---|
| 概要 | さまざまな理由で発生することがあります。 Indeed はこのエラーを厳密に監視しています。詳細については、Indeed Support にお問い合わせください。 |
Internal server error
Indeed はサービスの 100% 稼働を目指していますが、エラーが発生し、サービス呼び出しが失敗することがあります。たとえば、次のサービスやコンポーネントが失敗することがあります。
- Indeed インフラストラクチャ内のバックエンドサービス。
- クライアントとサーバー間のネットワーク。
- その間にあるもの。
一般に、この種のエラーに対しては基本的な再試行ロジックを実装することをお勧めします。エラーが断続的な場合は、再試行すると解消することがあります。問題が続く場合は、サーバー側に実際の問題がある可能性があります。その場合は、Indeed サポートにお問い合わせください。
Indeed PLUS APIを呼び出すと、5,000ミリ秒後にタイムアウトとなります。
JobIdentifierInput must specify one of indeedJobKey, employerJobId, or atsApplicationIdentifier
message | JobIdentifierInput must specify one of indeedJobKey, employerJobId, or atsApplicationIdentifier |
|---|---|
| 概要 | 応募結果を処理できるようにするため、これらの識別子のうち少なくとも 1 つを指定してください。
|
JobSeekerIdentifierInput must specify either indeedJobSeekerKey or emailAddress
message | JobSeekerIdentifierInput must specify either indeedJobSeekerKey or emailAddress |
|---|---|
| 概要 | 応募結果を処理できるようにするため、これらの識別子のうち少なくとも 1 つを指定してください。
|
PartnerDispositionIdentifierInput must specify one of indeedApplyID, ittk, universalApplyId, or alternateIdentifier
message | PartnerDispositionIdentifierInput must specify one of indeedApplyID, ittk, universalApplyId, or alternateIdentifier |
|---|---|
| 概要 | 応募結果を処理できるようにするため、これらの識別子のうち少なくとも 1 つを指定してください。
|
Unable to parse statusChangeDateTime
message | Unable to parse statusChangeDateTime |
|---|---|
| 概要 | サーバーはリクエストを受信しましたが、指定された 正しい このエラーは、リクエスト内の |
Validation errors in batch requests
複数の求人を含むバッチリクエストを送信すると、一部の求人は成功し、ほかの求人は失敗していても、Job Sync API がリクエスト全体を拒否することがあります。この動作は、GraphQL の基盤となる動作によるものです。
バッチ呼び出しでは、API は求人票を作成した順序で sourcedPostingIds の値を一覧表示します。
エラーの classification に応じて、Job Sync API は検証エラーを異なる方法で処理します。
| エラー分類 | Job Sync API |
|---|---|
ExtendedValidationError | バッチリクエスト内の 1 つ以上の求人が失敗しても、バッチリクエスト内の求人の処理を続行します。 |
Other than | バッチリクエスト内の 1 つ以上の求人が失敗すると、バッチリクエスト全体を拒否します。 この種のエラーの例については、検証エラーの例 を参照してください。 |
検証エラーの例
{ "errors": [{ "extensions": { "code": "BAD_USER_INPUT", "classification": "ValidationError" }, "locations": [{ "line": 1, "column": 46 }], "message": "Validation error (WrongType@[jobsIngest/createSourcedJobPostings]) : argument 'input.jobPostings[1].metadata.contacts[0].contactInfo.contactPhone' with value 'StringValue{value='***********'}' is not a valid 'PhoneNumber' - String value `10001212223` is not a valid E.164 phone number" }]}Variable input has an invalid value error
message | Variable 'input' has an invalid value: String value is not a valid web URL. Relative paths are not allowed. Value must be an absolute URL. |
|---|---|
code | BAD_USER_INPUT |
| 概要 | ミューテーションまたはクエリに値を渡すために変数を使用し、それらが検証チェックを通過しない場合、GraphQL はどの変数に問題があるかとその理由を特定しますが、デフォルトでは、その変数がミューテーションまたはクエリのどこで使用されているかを示すパス情報は含まれません。 つまり、アプリ固有の検証では path 変数が更新されますが、型検証など、GraphQL フレームワークが実行する検証では更新されません。 |
一般的な GraphQL エラーコード
Built-in error codes も参照してください。
errors 配列の code フィールドに表示される一般的なエラーコードは次のとおりです。
| エラー | 説明と一般的な原因 | 未変更のクエリは成功できますか |
|---|---|---|
BAD_REQUEST | 入力が無効であるか、処理できません。詳細はエラーメッセージを参照してください。 | いいえ |
BAD_USER_INPUT | 入力が無効であるか、処理できません。エラーメッセージを確認し、クエリを修正してから再試行してください。詳細については、BAD_USER_INPUT error を参照してください。 | いいえ |
FORBIDDEN | 認証情報に十分な権限がありません。HTTP | いいえ |
GRAPHQL_PARSE_FAILED | GRAPHQL_PARSE_FAILED error を参照してください。 | |
INTERNAL_SERVER_ERROR | サーバーで予期しないエラーが発生し、応答できませんでした。リクエストを再試行してください。 | はい |
QUERY_TOO_COMPLEX | クエリが許可されている複雑さを超えています。クエリを修正して再試行してください。 | いいえ |
QUERY_TOO_NESTED | クエリのネストが深すぎます。クエリを修正して再試行してください。 | いいえ |
UNAUTHENTICATED | リクエストに認証情報がありません。HTTP | いいえ |
BAD_USER_INPUT error
message | Exception while fetching data |
|---|---|
code | BAD_USER_INPUT |
| 概要 | クライアントが無効なデータを送信しました。 |
BAD_USER_INPUT エラータイプの validation error は、クライアントが無効なデータを送信した場合に発生します。次の例は、その検証エラーを示しています。
{ "errors": [{ "message": "Exception while fetching data (/patchEmployer) : EmployerIdentifiersInput contains invalid type or id", "path": [ "patchEmployer" ], "extensions": { "code": "BAD_USER_INPUT", "classification": { "type": "ExtendedValidationError", "validatedPath": [ "patchEmployer", "input", "employerAttributes", "countrySpecificAttributes", 0, "websiteUrl" ], "constraint": "@DossierUrlConstraint" }, "serviceName": "company-data-api", "stacktrace": [ "GraphQLError: Exception while fetching data (/patchEmployer) : EmployerIdentifiersInput contains invalid type or id" ] } }], "data": { "patchEmployer": null }}FORBIDDEN error
message | Client is not authorized |
|---|---|
code | FORBIDDEN |
| 概要 | OAuth クライアントが Indeed API gateway に登録されていません。 |
OAuth クライアントが Indeed API gateway に登録されていない場合は、FORBIDDEN コードとともに Client is not authorized メッセージを受け取ることがあります。次の例を参照してください。
{ "data": null, "errors": [{ "extensions": { "code": "FORBIDDEN" }, "message": "Client is not authorized." }]}OAuth クライアントを Indeed API gateway に登録するには、サポートに問い合わせる を参照してください。
GRAPHQL_PARSE_FAILED error
message | Syntax Error: Invalid number, expected digit but got: "a". |
|---|---|
code | GRAPHQL_PARSE_FAILED |
| 概要 | GraphQL の操作文字列に構文エラーが含まれています。通常、このエラーは |
たとえば、このペイロードでは HTML をエスケープしていません。
mutation { createSourcedJobPostings( input: { jobPostings: [{ body: { title: "Server" description: "<h4 style="text - align: left;">Responsibilities include:</h4> <ul> <li style="text-align: left;"> Customer interaction </li> <li style="text-align: left;"> Taking orders and closing checks </li> <li style="text-align: left;"> Food and drink service </li> <li style="text-align: left;"> General table and restaurant maintenance </li> <li style="text-align: left;"> Restaurant opening and closing duties </li> </ul>" location: { country: "US", cityRegionPostal: "Clio, MI 48420" } benefits: [] salary: { currency: "USD" minimumMinor: 387 maximumMinor: 387 period: "HOUR" } } metadata: { jobSource: { companyName: "Company name" sourceName: "Parent company name" sourceType: "Employer" } contacts: { contactType: "contact" contactInfo: { contactName: "Contact name" contactEmail: "contact@email.com" } } jobPostingId: "7308" datePublished: "2023-09-13T17:32Z" url: "https://companyname.com/jobs/1000/server" } applyMethod: { indeedApply: { apiToken: "e03dd8c2dd1748218c6d5cde83824606807f617dfa054b78f9192d1341a5d15d" postUrl: "https://app.companyname.com/ext/indeed/apply/" applyQuestions: "https://app.companyname.com/ext/indeed/apply/questions/1000/" resumeRequired: YES phoneRequired: YES } } }] } ) { results { jobPosting { sourcedPostingId } } }}次のエラーが発生します。
{ 'errors': [{ 'message': 'Syntax Error: Invalid number, expected digit but got: "a".', 'locations': [{ 'line': 7, 'column': 33 }], 'extensions': { 'code': 'GRAPHQL_PARSE_FAILED' } }]}この例を修正するには、description フィールド内の HTML タグをエスケープしてください。
引用符をエスケープします。<h4>、<ul>、<li> などの HTML タグはそのまま使用できます。
mutation { createSourcedJobPostings( input: { jobPostings: [{ body: { title: "Server" description: "<h4 style=\"text - align: left;\">Responsibilities include:</h4> <ul> <li style=\"text-align: left;\"> Customer interaction </li> <li style=\"text-align: left;\"> Taking orders and closing checks </li> <li style=\"text-align: left;\"> Food and drink service </li> <li style=\"text-align: left;\"> General table and restaurant maintenance </li> <li style=\"text-align: left;\"> Restaurant opening and closing duties </li> </ul>" location: { country: "US", cityRegionPostal: "Clio, MI 48420" } benefits: [] salary: { currency: "USD" minimumMinor: 387 maximumMinor: 387 period: "HOUR" } } metadata: { jobSource: { companyName: "Company name" sourceName: "Parent company name" sourceType: "Employer" } contacts: { contactType: "contact" contactInfo: { contactName: "Contact name" contactEmail: "contact@email.com" } } jobPostingId: "7308" datePublished: "2023-09-13T17:32Z" url: "https://companyname.com/jobs/1000/server" } applyMethod: { indeedApply: { apiToken: "e03dd8c2dd1748218c6d5cde83824606807f617dfa054b78f9192d1341a5d15d" postUrl: "https://app.companyname.com/ext/indeed/apply/" applyQuestions: "https://app.companyname.com/ext/indeed/apply/questions/1000/" resumeRequired: YES phoneRequired: YES } } }] } ) { results { jobPosting { sourcedPostingId } } }}HTTP ステータスコード
GraphQL 関連の HTTP ステータスコードは次のとおりです。
| HTTP status code | 説明と解決方法 | |
|---|---|---|
| GraphQL 操作は成功しました。 | |
| エラーが発生しました。一般的なエラーコード を参照してください。 | |
| Apollo Server は、リクエストを有効な GraphQL ドキュメントとして解析し、スキーマに対して検証できません。 この動作は、 | |
| リクエストで、mutation に対する | |
| クライアントが一定期間内に送信したリクエスト数が多すぎます。レート制限を超えました。 このエラーを回避するには、再試行回数を減らすか、再試行間の待機時間を長くしてください。 詳細については、次を参照してください。 | |
| このエラーの原因として、次のものが考えられます。
| |
HTTP ステータスコードの概要については、RFC 9110: Overview of Status Codes を参照してください。
Apollo Server のエラーコードについては、Apollo GraphQL Docs: Setting HTTP status code and headers を参照してください。