🚀 Phát hành phiên bản mới 0.8 của Gato GraphQL!
Phiên bản 0.8 của Gato GraphQL hiện đã có thể tải xuống! 🎉
Đây là một bản phát hành lớn, tập trung vào ba lĩnh vực:
- Tái cấu trúc codebase để hỗ trợ các extension
- Tuân thủ đặc tả GraphQL tốt hơn
- Hoàn thiện schema GraphQL
Ngoài ra, phiên bản này hỗ trợ WordPress 5.8 mới và chứa nhiều bản sửa lỗi cùng cải tiến.
Lưu ý rằng bản phát hành này chứa các thay đổi không tương thích ngược!
Dưới đây là các ghi chú phát hành. Liên kết nhanh:
- Hỗ trợ WordPress 5.8
- Cải thiện hỗ trợ PHP 8.0
- Đơn giản hóa codebase, sử dụng container services ở mọi nơi
- Cache được lưu dưới
wp-content - Một endpoint GraphQL "schema cố định" đã được giới thiệu để hỗ trợ trình soạn thảo WordPress
- Hỗ trợ thêm các kiểu trường trong schema
- Input coercion: chấp nhận một giá trị đơn khi danh sách được mong đợi
- Hoàn thiện thêm schema WordPress
- Thêm các trường admin "unrestricted" vào schema GraphQL
- Giới thiệu kiểu scalar
AnyScalar - Settings ở định dạng dài
- Các thay đổi không tương thích ngược
- Lộ trình sắp tới
- Gặp phải vấn đề?
Hỗ trợ WordPress 5.8
WordPress 5.8 đã loại bỏ một số filter hooks, bao gồm allowed_block_types và block_categories (được sử dụng bởi plugin này).
Các hook bị ảnh hưởng đã được thay thế:
allowed_block_types=>allowed_block_types_allblock_categories=>block_categories_all
Cải thiện hỗ trợ PHP 8.0
Bản phát hành này sửa một số vấn đề khi sử dụng PHP 8.0.
Đơn giản hóa codebase, sử dụng container services ở mọi nơi
Codebase của máy chủ GraphQL đã được tái cấu trúc để sử dụng service container để đăng ký tất cả các phần tử của schema (type resolvers, field resolvers, interface resolvers, custom scalar resolvers và các phần tử khác).
Đây là một cột mốc quan trọng, giới thiệu một phương pháp duy nhất để phát triển plugin và các extension của nó, giúp đơn giản hóa đáng kể code và tài liệu của chúng.
Tài liệu về cách tạo các extension tùy chỉnh cho Gato GraphQL cuối cùng có thể được viết. Công việc trên đó sẽ bắt đầu sớm và sẽ được xuất bản trong phần hướng dẫn.
Cache được lưu dưới wp-content
Plugin lưu kết quả vào đĩa để tối ưu hóa hiệu suất.
Các tệp được lưu trong cache trước đây được lưu trữ trong một thư mục hệ thống, ẩn khỏi tầm nhìn của người dùng quản trị. Từ bây giờ, chúng được lưu trữ dưới wp-content/graphql-api/cache/.
Một endpoint GraphQL "schema cố định" đã được giới thiệu để hỗ trợ trình soạn thảo WordPress
Hiện tại, có 2 endpoint trong wp-admin:
GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINTGRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT
Với GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINT, schema GraphQL được sửa đổi theo tùy chọn của người dùng, chẳng hạn như có namespace hay không, có các type/directive được bật hay không, và các tùy chọn khác.
Với GRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT, schema GraphQL không được sửa đổi theo tùy chọn của người dùng, luôn hiển thị tất cả các type, trường và directive, bao gồm cả các trường admin "unrestricted".
Endpoint cố định cho phép các khối Gutenberg truy vấn tất cả các trường, bất kể chúng có được người dùng bật hay không, và với quyền truy cập không bị hạn chế.
Hỗ trợ thêm các kiểu trường trong schema
Hỗ trợ cho danh sách như các kiểu trường đã được mở rộng, hiện hỗ trợ các tính năng sau:
- Danh sách với các phần tử không null:
[String!] - Danh sách của danh sách:
[[String]] - Bất kỳ sự kết hợp nào của chúng:
[[String!]!]
Input coercion: chấp nhận một giá trị đơn khi danh sách được mong đợi
Giờ chúng ta có thể nhập một giá trị đơn trong queries GraphQL khi một danh sách được mong đợi, như được định nghĩa trong đặc tả GraphQL.
Ví dụ, các queries này hiện tương đương:
query InputSingleValue {
posts(filter: { ids: 1 }) {
title
}
}
query InputListOfSingleItem {
posts(filter: { ids: [1] }) {
title
}
}Hoàn thiện thêm schema WordPress
Các thực thể bổ sung từ mô hình dữ liệu WordPress đã được thêm vào schema GraphQL:

Hãy xem những phần tử mới nào đã được thêm vào.
Danh mục
Danh mục đã được ánh xạ, thông qua kiểu PostCategory mới, và các trường mới:
Root.postCategories: [PostCategory]Root.postCategory: PostCategoryPost.categories: [PostCategory]
Ví dụ, queries này lấy các danh mục cho các bài đăng:
{
posts {
id
title
categories {
id
name
url
}
}
}Một trường mutation, để gán danh mục cho bài đăng, cũng đã được thêm vào:
MutationRoot.setCategoriesOnPost: Post
Và một input categories đã được thêm vào các trường mutation cho bài đăng:
MutationRoot.createPostMutationRoot.updatePostPost.update(khi nested mutations được bật)
Meta
Các giá trị meta của custom post, người dùng, bình luận và taxonomy hiện có thể được truy vấn, thông qua các trường mới:
Post.metaValue: AnyScalarPost.metaValues: [AnyScalar]User.metaValue: AnyScalarUser.metaValues: [AnyScalar]Comment.metaValue: AnyScalarComment.metaValues: [AnyScalar]PostCategory.metaValue: AnyScalarPostCategory.metaValues: [AnyScalar]PostTag.metaValue: AnyScalarPostTag.metaValues: [AnyScalar]
Ví dụ, queries này lấy meta last_name cho người dùng:
{
users {
id
lastName: metaValue(key: "last_name")
}
}Vì các giá trị meta có thể là bất cứ thứ gì (string, integer, float hoặc boolean) nên chúng đã được ánh xạ thông qua kiểu scalar chung mới được giới thiệu AnyScalar.
Các giá trị meta có thể là công khai hoặc riêng tư. Các meta key có thể được truy vấn phải được cấu hình rõ ràng trong trang cài đặt:

Theo mặc định, danh sách các meta key được phép là trống.
Menus
Các menu đã được ánh xạ, thông qua kiểu Menu mới, và trường mới Root.menu.
{
menu(by: { id: 176 }) {
itemDataEntries
}
}Settings
Các cài đặt từ trang web (được lưu trữ trong bảng wp_options) có thể được truy vấn thông qua trường mới Root.option: AnyScalar.
Ví dụ, queries này lấy tên của trang web:
{
siteName: optionValue(name: "blogname")
}Các tùy chọn nào có thể truy cập phải được cấu hình rõ ràng trong trang cài đặt:

Theo mặc định, chỉ có thể truy vấn các tùy chọn sau:
"home""blogname""blogdescription"
User posts
Người dùng đã đăng nhập có thể lấy các bài đăng của họ, với bất kỳ trạng thái nào (publish, pending, draft hoặc trash), thông qua các trường mới:
Root.myPosts: [Post]Root.myPostCount: IntRoot.myPost: Post
Ví dụ, giờ chúng ta có thể chạy queries này:
# Log yourself in first
mutation LogIn {
loginUser(usernameOrEmail: "test", password: "pass") {
id
name
}
}
# Then retrieve your posts
query GetMyPosts {
myPosts {
id
title
url
status
author {
name
}
}
}Thêm các trường admin "unrestricted" vào schema GraphQL
Schema GraphQL phải cân bằng giữa các trường công khai và riêng tư, để tránh tiết lộ thông tin riêng tư trong một API công khai.
Module mới Schema for the Admin thêm các trường admin "unrestricted" vào schema GraphQL, có thể hiển thị dữ liệu riêng tư:
Root:
unrestrictedPostunrestrictedPostsunrestrictedPostCountunrestrictedCustomPostunrestrictedCustomPostsunrestrictedCustomPostCountunrestrictedGenericCustomPostunrestrictedGenericCustomPostsunrestrictedGenericCustomPostCountunrestrictedPageunrestrictedPagesunrestrictedPageCountunrestrictedUsersrolescapabilities
User:
unrestrictedPostsunrestrictedPostCountunrestrictedCustomPostsunrestrictedCustomPostCountrolescapabilities
PostCategory:
unrestrictedPostsunrestrictedPostCount
PostTag:
unrestrictedPostsunrestrictedPostCount
Ví dụ, để truy cập dữ liệu bài đăng, hiện tại chúng ta có trường posts, chỉ hiển thị dữ liệu công khai bằng cách lấy các bài đăng đã xuất bản.
Từ bây giờ, chúng ta cũng có thể truy cập dữ liệu bài đăng thông qua trường unrestrictedPosts, hiển thị dữ liệu công khai và riêng tư bằng cách lấy các bài đăng với bất kỳ trạng thái nào ("publish", "draft", "pending", "trash").
{
unrestrictedPosts(status: [draft, pending]) {
id
title
status
author {
id
name
}
}
}Giới thiệu kiểu scalar AnyScalar
Kiểu scalar AnyScalar đại diện cho bất kỳ scalar tích hợp nào (String, Int, Boolean, Float hoặc ID).
Nó được sử dụng trên trường option và metaValue(s) mới được giới thiệu, vì chúng ta không biết trước kiểu dữ liệu trả về của chúng, và sự kết hợp của các kiểu scalar chưa được đặc tả GraphQL hỗ trợ.
Settings ở định dạng dài
Các tùy chọn trong trang Settings được chia theo tab. Từ v0.8, cũng có thể xem tất cả chúng cùng nhau trong một trang dài duy nhất.
Để bật hành vi này, hãy bỏ chọn mục "Have all options in this Settings page be organized under tabs, one tab per module." trong Settings, và nhấn vào "Save Changes":

Sau đó, tất cả các cài đặt sẽ được hiển thị cùng nhau ở định dạng dài:

Các thay đổi không tương thích ngược
Phiên bản v0.8 tạo ra các thay đổi không tương thích ngược với phiên bản trước.
Các thay đổi cấu hình không tương thích ngược
Các CPT sau đây đã có khối "Options" của chúng được xây dựng lại:
- Schema Configurations
- Custom Endpoints
- Persisted Queries
Trong phiên bản trước v0.7, một khối Options duy nhất cho các thực thể này chứa nhiều mục cấu hình. Kể từ v0.8, khối này đã được tách ra thành nhiều khối độc lập, mỗi khối chứa cấu hình riêng của nó.
Ví dụ, trong v0.7, (ngoài việc bật/tắt endpoint) khối Custom Endpoint Options cho phép cấu hình các client GraphiQL và Interactive Schema:

Kể từ v0.8, cấu hình này được thêm thông qua các khối GraphiQL và Interactive Schema:

Cấu hình được lưu trữ trong các khối Options cho cả 3 CPT không được tự động di chuyển sang định dạng mới. Do đó, trước khi nâng cấp lên v0.8, vui lòng ghi lại cấu hình đã lưu trữ của bạn và sao chép lại sau khi nâng cấp lên phiên bản mới.
Chúng tôi xin lỗi vì sự bất tiện này.
Ngoài ra, bạn sẽ cần nhấp vào nút "Reset the template" được hiển thị trong trình soạn thảo WordPress, cho tất cả các mục trong 3 CPT.

Các directive không chuẩn đã bị xóa
Các directive không chuẩn đã bị xóa khỏi plugin:
@default@removeIfNull@export
Các module đã bị xóa
Các module sau đây đã bị xóa khỏi plugin:
- Field Deprecation
- Configuration Cache
- Schema Cache
- Multiple Query Execution
- Proactive Feedback
- Schema Editing Access
- Embeddable fields
Lộ trình sắp tới
Bây giờ v0.8 đã được phát hành, chúng ta có thể bắt đầu lên kế hoạch cho con đường phía trước.
Kế hoạch hiện tại như sau:
Phát hành v0.9 vào tháng 9 năm 2021, bao gồm:
- Custom scalars
- Một schema GraphQL được cập nhật, sử dụng custom scalars khi thích hợp (ví dụ:
Post.datesẽ trả về kiểuDatethay vìString) - Các cải tiến thêm để hỗ trợ các extension
Và sau đó, phát hành v1.0 vào cuối năm hoặc đầu năm 2022, bao gồm:
- Một demo về một extension plugin
- Hướng dẫn tài liệu đầy đủ về cách tạo các extension
- Ra mắt plugin Gato GraphQL trên
wp.org
Để nhận thông báo về trạng thái hiện tại, bạn có thể đăng ký nhận bản tin.
Gặp phải vấn đề?
Nếu bạn gặp bất kỳ vấn đề nào khi cài đặt hoặc chạy v0.8, vui lòng tạo một issue trong repo.