๐ Dirilis versi baru 0.8 dari Gato GraphQL!
Versi 0.8 dari Gato GraphQL kini tersedia untuk diunduh! ๐
Ini adalah rilis yang sangat besar, yang berfokus pada tiga area:
- Refaktorisasi codebase untuk mengaktifkan ekstensi
- Memenuhi spesifikasi GraphQL lebih jauh
- Melengkapi skema GraphQL
Selain itu, versi ini mendukung WordPress 5.8 yang baru, dan mengandung banyak perbaikan bug serta peningkatan.
Harap diperhatikan bahwa rilis ini mengandung breaking changes!
Berikut adalah catatan rilis. Tautan cepat:
- Dukungan untuk WordPress 5.8
- Peningkatan dukungan untuk PHP 8.0
- Menyederhanakan codebase, menggunakan container services di mana-mana
- Cache disimpan di bawah
wp-content - Endpoint GraphQL "skema tetap" diperkenalkan untuk mendukung editor WordPress
- Dukungan lebih lanjut untuk tipe field dalam skema
- Input coercion: menerima nilai tunggal ketika list diharapkan
- Skema WordPress lebih dilengkapi
- Ditambahkan field admin "unrestricted" ke skema GraphQL
- Diperkenalkan tipe skalar
AnyScalar - Settings dalam format panjang
- Breaking changes
- Roadmap Mendatang
- Mengalami masalah?
Dukungan untuk WordPress 5.8
WordPress 5.8 mendeprekasi beberapa filter hooks, termasuk allowed_block_types dan block_categories (yang digunakan oleh plugin ini).
Hook yang terpengaruh telah digantikan:
allowed_block_types=>allowed_block_types_allblock_categories=>block_categories_all
Peningkatan dukungan untuk PHP 8.0
Rilis ini memperbaiki beberapa masalah saat menggunakan PHP 8.0.
Menyederhanakan codebase, menggunakan container services di mana-mana
Codebase untuk server GraphQL telah direfaktorisasi, untuk menggunakan service container dalam mendaftarkan semua elemen skema (type resolvers, field resolvers, interface resolvers, custom scalar resolvers, dan lainnya).
Ini adalah tonggak sejarah, yang memperkenalkan satu pendekatan tunggal untuk mengembangkan plugin dan ekstensinya, sangat menyederhanakan kode dan dokumentasinya.
Dokumentasi tentang cara membuat ekstensi kustom untuk Gato GraphQL akhirnya dapat ditulis. Pekerjaan pada dokumentasi tersebut akan segera dimulai, dan akan dipublikasikan di bagian panduan.
Cache disimpan di bawah wp-content
Plugin menyimpan hasil cache ke disk untuk mengoptimalkan performa.
File yang di-cache sebelumnya disimpan di bawah folder sistem, tidak terlihat oleh pengguna admin. Mulai sekarang, file tersebut disimpan di bawah wp-content/graphql-api/cache/.
Endpoint GraphQL "skema tetap" diperkenalkan untuk mendukung editor WordPress
Sekarang, ada 2 endpoint di wp-admin:
GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINTGRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT
Dengan GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINT, skema GraphQL dimodifikasi oleh preferensi pengguna, seperti menggunakan namespace atau tidak, mengaktifkan tipe/direktif atau tidak, dan lainnya.
Dengan GRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT, skema GraphQL tidak dimodifikasi oleh preferensi pengguna, selalu mengekspos semua tipe, field, dan direktif, termasuk field admin "unrestricted".
Endpoint tetap memungkinkan blok Gutenberg untuk melakukan query semua field, terlepas dari apakah field tersebut diaktifkan atau tidak oleh pengguna, dan dengan akses tanpa batasan.
Dukungan lebih lanjut untuk tipe field dalam skema
Dukungan untuk list sebagai tipe field telah diperluas, kini mendukung fitur-fitur berikut:
- List dengan item non-null:
[String!] - List dari list:
[[String]] - Kombinasi apapun dari keduanya:
[[String!]!]
Input coercion: menerima nilai tunggal ketika list diharapkan
Kita sekarang dapat memasukkan nilai tunggal dalam query GraphQL di mana list diharapkan, sebagaimana didefinisikan dalam spesifikasi GraphQL.
Misalnya, query-query ini sekarang setara:
query InputSingleValue {
posts(filter: { ids: 1 }) {
title
}
}
query InputListOfSingleItem {
posts(filter: { ids: [1] }) {
title
}
}Skema WordPress lebih dilengkapi
Entitas tambahan dari model data WordPress telah ditambahkan ke skema GraphQL:

Mari kita lihat elemen baru apa saja yang telah ditambahkan.
Kategori
Kategori telah dipetakan, melalui tipe baru PostCategory, dan field-field baru:
Root.postCategories: [PostCategory]Root.postCategory: PostCategoryPost.categories: [PostCategory]
Misalnya, query ini mengambil kategori untuk postingan:
{
posts {
id
title
categories {
id
name
url
}
}
}Field mutation, untuk menetapkan kategori ke postingan, juga telah ditambahkan:
MutationRoot.setCategoriesOnPost: Post
Dan input categories telah ditambahkan ke field mutation untuk postingan:
MutationRoot.createPostMutationRoot.updatePostPost.update(ketika nested mutations diaktifkan)
Meta
Nilai meta untuk custom post, pengguna, komentar, dan taksonomi kini dapat di-query, melalui field-field baru:
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]
Misalnya, query ini mengambil meta last_name untuk pengguna:
{
users {
id
lastName: metaValue(key: "last_name")
}
}Karena nilai meta dapat berupa apa saja (string, integer, float, atau boolean), nilai-nilai tersebut telah dipetakan melalui tipe skalar generik yang baru diperkenalkan, yaitu AnyScalar.
Nilai meta bisa bersifat publik atau privat. Meta key mana yang dapat di-query harus dikonfigurasi secara eksplisit di halaman settings:

Secara default, daftar meta key yang diizinkan kosong.
Menu
Menu telah dipetakan, melalui tipe baru Menu, dan field baru Root.menu.
{
menu(by: { id: 176 }) {
itemDataEntries
}
}Settings
Settings dari situs (disimpan dalam tabel wp_options) dapat di-query melalui field baru Root.option: AnyScalar.
Misalnya, query ini mengambil nama situs:
{
siteName: optionValue(name: "blogname")
}Opsi mana yang dapat diakses harus dikonfigurasi secara eksplisit di halaman settings:

Secara default, hanya opsi-opsi berikut yang dapat di-query:
"home""blogname""blogdescription"
User posts
Pengguna yang sudah login dapat mengambil postingan mereka sendiri, untuk status apa pun (publish, pending, draft atau trash), melalui field-field baru:
Root.myPosts: [Post]Root.myPostCount: IntRoot.myPost: Post
Misalnya, kita sekarang dapat menjalankan query ini:
# 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
}
}
}Ditambahkan field admin "unrestricted" ke skema GraphQL
Skema GraphQL harus menyeimbangkan antara field publik dan privat, untuk menghindari pengungkapan informasi privat dalam API publik.
Modul baru Schema for the Admin menambahkan field admin "unrestricted" ke skema GraphQL, yang dapat mengungkapkan data privat:
Root:
unrestrictedPostunrestrictedPostsunrestrictedPostCountunrestrictedCustomPostunrestrictedCustomPostsunrestrictedCustomPostCountunrestrictedGenericCustomPostunrestrictedGenericCustomPostsunrestrictedGenericCustomPostCountunrestrictedPageunrestrictedPagesunrestrictedPageCountunrestrictedUsersrolescapabilities
User:
unrestrictedPostsunrestrictedPostCountunrestrictedCustomPostsunrestrictedCustomPostCountrolescapabilities
PostCategory:
unrestrictedPostsunrestrictedPostCount
PostTag:
unrestrictedPostsunrestrictedPostCount
Misalnya, untuk mengakses data postingan, saat ini kita memiliki field posts, yang hanya mengekspos data publik, dengan mengambil postingan yang dipublikasikan.
Mulai sekarang, kita juga dapat mengakses data postingan melalui field unrestrictedPosts, yang mengekspos data publik dan privat, dengan mengambil postingan dengan status apa pun ("publish", "draft", "pending", "trash").
{
unrestrictedPosts(status: [draft, pending]) {
id
title
status
author {
id
name
}
}
}Diperkenalkan tipe skalar AnyScalar
Tipe skalar AnyScalar merepresentasikan salah satu dari skalar bawaan (String, Int, Boolean, Float atau ID).
Tipe ini digunakan pada field option dan metaValue(s) yang baru diperkenalkan, karena kita tidak mengetahui sebelumnya tipe data yang dikembalikan, dan gabungan tipe skalar belum didukung oleh spesifikasi GraphQL.
Settings dalam format panjang
Opsi-opsi di halaman Settings dibagi berdasarkan tab. Sejak v0.8, dimungkinkan juga untuk melihat semuanya bersama-sama dalam satu halaman panjang.
Untuk mengaktifkan perilaku ini, hapus centang item "Have all options in this Settings page be organized under tabs, one tab per module." di Settings, dan tekan "Save Changes":

Kemudian, semua settings akan ditampilkan bersama dalam format panjang:

Breaking changes
Rilis v0.8 menghasilkan breaking changes dengan versi sebelumnya.
Configuration breaking changes
CPT-CPT berikut telah memiliki blok "Options" mereka yang dibangun ulang:
- Schema Configurations
- Custom Endpoints
- Persisted Queries
Pada v0.7 sebelumnya, satu blok Options untuk entitas-entitas ini mengandung banyak item konfigurasi. Sejak v0.8, blok ini telah dipisahkan menjadi beberapa blok independen, masing-masing mengandung konfigurasinya sendiri.
Misalnya, pada v0.7, (selain mengaktifkan/menonaktifkan endpoint) blok Custom Endpoint Options memungkinkan konfigurasi klien GraphiQL dan Interactive Schema:

Sejak v0.8, konfigurasi ini ditambahkan melalui blok GraphiQL dan Interactive Schema:

Konfigurasi yang tersimpan dalam blok Options untuk ketiga CPT tidak secara otomatis dimigrasikan ke format baru. Oleh karena itu, sebelum melakukan upgrade ke v0.8, harap catat konfigurasi yang tersimpan, dan replikasikan setelah melakukan upgrade ke versi baru.
Mohon maaf atas ketidaknyamanan ini.
Selain itu, Anda perlu mengklik tombol "Reset the template" yang ditampilkan di editor WordPress, untuk semua entri pada ketiga CPT.

Direktif non-standar dihapus
Direktif non-standar telah dihapus dari plugin:
@default@removeIfNull@export
Modul dihapus
Modul-modul berikut telah dihapus dari plugin:
- Field Deprecation
- Configuration Cache
- Schema Cache
- Multiple Query Execution
- Proactive Feedback
- Schema Editing Access
- Embeddable fields
Roadmap Mendatang
Sekarang v0.8 telah dirilis, kita dapat mulai merencanakan jalan ke depan.
Rencana saat ini adalah sebagai berikut:
Merilis v0.9 pada September 2021, termasuk:
- Custom scalars
- Skema GraphQL yang diperbarui, menggunakan custom scalars kapan pun sesuai (misalnya:
Post.dateakan mengembalikan tipeDatebukanString) - Peningkatan lebih lanjut untuk mendukung ekstensi
Dan kemudian, merilis v1.0 sekitar akhir tahun atau awal 2022, termasuk:
- Demo plugin ekstensi
- Panduan dokumentasi lengkap tentang membuat ekstensi
- Peluncuran plugin Gato GraphQL di
wp.org
Untuk menerima notifikasi tentang status terkini, Anda dapat berlangganan newsletter.
Mengalami masalah?
Jika Anda mengalami masalah saat menginstal atau menjalankan v0.8, harap buat issue di repo.