Blog

๐Ÿš€ Dirilis versi baru 0.8 dari Gato GraphQL!

Leonardo Losoviz
Oleh Leonardo Losoviz ยท

Versi 0.8 dari Gato GraphQL kini tersedia untuk diunduh! ๐ŸŽ‰

Ini adalah rilis yang sangat besar, yang berfokus pada tiga area:

  1. Refaktorisasi codebase untuk mengaktifkan ekstensi
  2. Memenuhi spesifikasi GraphQL lebih jauh
  3. 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

WordPress 5.8 mendeprekasi beberapa filter hooks, termasuk allowed_block_types dan block_categories (yang digunakan oleh plugin ini).

Hook yang terpengaruh telah digantikan:

  1. allowed_block_types => allowed_block_types_all
  2. block_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:

  1. GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINT
  2. GRAPHQL_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:

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: PostCategory
  • Post.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.createPost
  • MutationRoot.updatePost
  • Post.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: AnyScalar
  • Post.metaValues: [AnyScalar]
  • User.metaValue: AnyScalar
  • User.metaValues: [AnyScalar]
  • Comment.metaValue: AnyScalar
  • Comment.metaValues: [AnyScalar]
  • PostCategory.metaValue: AnyScalar
  • PostCategory.metaValues: [AnyScalar]
  • PostTag.metaValue: AnyScalar
  • PostTag.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:

Mendefinisikan entri
Mendefinisikan entri

Secara default, daftar meta key yang diizinkan kosong.

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:

Mendefinisikan entri untuk 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: Int
  • Root.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:

  • unrestrictedPost
  • unrestrictedPosts
  • unrestrictedPostCount
  • unrestrictedCustomPost
  • unrestrictedCustomPosts
  • unrestrictedCustomPostCount
  • unrestrictedGenericCustomPost
  • unrestrictedGenericCustomPosts
  • unrestrictedGenericCustomPostCount
  • unrestrictedPage
  • unrestrictedPages
  • unrestrictedPageCount
  • unrestrictedUsers
  • roles
  • capabilities

User:

  • unrestrictedPosts
  • unrestrictedPostCount
  • unrestrictedCustomPosts
  • unrestrictedCustomPostCount
  • roles
  • capabilities

PostCategory:

  • unrestrictedPosts
  • unrestrictedPostCount

PostTag:

  • unrestrictedPosts
  • unrestrictedPostCount

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":

Kotak centang untuk mengaktifkan/menonaktifkan tab di Settings

Kemudian, semua settings akan ditampilkan bersama dalam format panjang:

Settings 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:

Opsi dalam Custom Endpoint

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

Opsi dalam Custom Endpoint

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.

Reset the template di editor WordPress

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.date akan mengembalikan tipe Date bukan String)
  • 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.


Berlangganan newsletter kami

Tetap update dengan semua pembaruan Gato GraphQL.