Dấu chấm than nghĩa là field không bao giờ trả về null.
Đây là cam kết mạnh: nếu resolver trả về null cho field đó, lỗi sẽ lan lên field cha gần nhất cho phép null, và có thể xoá cả một nhánh dữ liệu lớn.
type Post {
id: ID! # always present
tags: [String!]! # list non-null AND items non-null
images: [String] # both nullable — one bad item cannot empty the list
author: User # nullable on purpose: fetched from another service
}Cơ chế lan lỗi này là lý do nhiều đội chọn chiến lược để phần lớn field cho phép null. Một field không null nằm sâu trong cây, khi downstream service gặp sự cố, có thể làm cả phản hồi thành null thay vì chỉ mất một mẩu dữ liệu.
Cách cân bằng thường dùng: giữ không null cho các field thật sự luôn tồn tại như id và các giá trị tính từ chính record; cho phép null ở các field lấy từ dịch vụ khác hoặc có thể chậm.
Với danh sách, ký hiệu áp cho cả danh sách lẫn phần tử nên có bốn tổ hợp — chọn nhầm là nguồn của lỗi một phần tử hỏng làm rỗng cả danh sách.