Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[Bug] Network errors are discarded.

Đang mở
#67 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
ruby
Lĩnh vực
api

Hướng nghiên cứu

Bắt đầu với lib/graphql/client/http.rb, tại phần giá trị trả về theo kiểu Either, và lib/graphql/schema/loader.rb, nơi load_schema sử dụng dump_schema. Truy vết đường đi của lỗi qua load_schema và các bên gọi execute khác được đề cập, bao gồm query(), sau đó xác minh rằng các lỗi HTTP hoặc GraphQL vẫn còn khả dụng thay vì trở thành một KeyError.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

If there's an HTTP error, calls to GraphQL::Client can return this:

KeyError: key not found: "data" (KeyError)

E.g., when I try the example in the readme to https://example.com/graphql, I expect some kind of network or HTTP error. Instead, I get the above KeyError.

I got this when making changes to my infrastructure. It made it very hard to debug problems.


I looked at load_schema, and found:

pry(main)> GraphQL::Client.load_schema(HTTP)
KeyError: key not found: "data" (KeyError)
from gems/3.4.0/gems/graphql-2.5.2/lib/graphql/schema/loader.rb:17:in 'Hash#fetch'

The load_schema call turns into load_schema(dump_schema(HTTP)). dump_schema seems to return full error info. So, between those two function calls, the information is lost:

[pry(main)> GraphQL::Client.dump_schema(HTTP)
=> {"errors" => [{"message" => "403 Forbidden"}]}

This happens other places that call execute, I believe, like .query().


In my opinion, the core problem is, the library uses fp-style Either error returns. However, Ruby doesn't have a way (like Rust or Haskell do) to enforce the handling of the error case. And so, it's possible to simply not handle them appropriately, like here.

Either-style API:

https://github.com/github-community-projects/graphql-client/blob/aff58829ea27c7e59213756aab0bdfdb0e03941a/lib/graphql/client/http.rb#L62-L63

IMO, the fix is to use Ruby's Exception/Error facility so that library clients can meaningfully handle errors.

Ngôn ngữ chính
Ruby
Star
78
Fork
228
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của github-community-projects/graphql-client

Tất cả issue của github-community-projects/graphql-client

Issue tương tự

Thêm issue về Ruby

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.