🔌 WordPress Eklentilerinden REST API Verilerine Erişim
Pek çok WordPress eklentisi verileri REST API aracılığıyla sunar ancak bir GraphQL katmanı sağlamaz. Gato GraphQL ile yine de bu verileri tek bir GraphQL isteğinde kullanabilirsiniz: HTTP Client uzantısı, herhangi bir REST endpoint'ini çağırmanıza ve JSON yanıtıyla doğrudan queries'inizde çalışmanıza olanak tanır.
Dolayısıyla bir eklentinin GraphQL entegrasyonu olmadığında çıkmaza girmezsiniz; REST API'sini GraphQL'den sorgular ve her şeyi tek bir yerde tutarsınız.
Bu yazı bunu nasıl yapacağınızı göstermektedir. Aynı kalıp, REST endpoint'leri sunan herhangi bir eklenti için geçerlidir.
Ön Koşullar
- HTTP Client uzantısının yüklü olduğundan emin olun (Gato GraphQL Power uzantıları ve paketlerinde yer almaktadır).
- Eklentinin REST tabanına izin verilmesi için İzin Verilen URL'leri yapılandırın. Aynı sitedeki istekler için site URL'nize izin verin (ör.
#https://siteniz.com/wp-json/.*#veya tam REST tabanınız). Bkz. HTTP isteklerine izin verilen URL'leri yapılandırma.
Eklentinin API'si yetkilendirme gerektiriyorsa, yetkilendirme token'ı oluşturmanız ve onu isteğe eklemeniz gerekecektir (ör. header'lar aracılığıyla).
Örnek: Randevu Rezervasyon Verilerini Alma
BookingPress, randevu verilerini almak için REST API endpoint'leri sunan bir randevu rezervasyon eklentisidir. Bu nedenle, söz konusu endpoint'leri GraphQL'den çağırabilir ve randevu verilerini alabiliriz.
BookingPress REST API belgelerine bakıldığında, mevcut endpoint tabanının wp-json/bookingpress/v1 olduğu görülmektedir.
1. Randevuları Listeleme (Koleksiyon)
API bir liste döndürdüğünde (ör. randevu dizisi) _sendJSONObjectCollectionHTTPRequest kullanın. API listeyi bir nesneye sarıyorsa (ör. { "data": [ ... ] }), _sendJSONObjectItemHTTPRequest kullanmanız ve ardından sonuçtan data özelliğini okumanız gerekebilir.
Aynı query'nin her ortamda çalışması için optionValue(name: "home") ile sitenizin ana URL'sinden URL'yi oluşturun:
query GetBookingPressAppointments {
siteURL: optionValue(name: "siteurl")
@remove
restBase: _sprintf(
string: "%s/wp-json/bookingpress/v1/appointments",
values: [$__siteURL]
)
@remove
bookingpressApiKey: _env(name: "BOOKINGPRESS_API_KEY")
@remove
authorizationHeader: _sprintf(
string: "x-bookingpress-api-key %s",
values: [$__bookingpressApiKey]
)
@remove
appointments: _sendJSONObjectCollectionHTTPRequest(
input: {
url: $__restBase,
method: GET,
options: {
headers: [
{
name: "Authorization",
value: $__authorizationHeader
}
]
}
}
)
}BOOKINGPRESS_API_KEY'i ortamınızda tanımlayın (ör. wp-config.php içinde). Query, bunu PHP Constants and Environment Variables uzantısının _env alanı aracılığıyla okur ve ardından @remove ile yanıttan kaldırır.
// In wp-config.php
define( 'BOOKINGPRESS_API_KEY', 'your-secret-key' );2. ID'ye Göre Tek Randevu
Tek bir randevu için _sendJSONObjectItemHTTPRequest kullanın ve URL'yi ID ile oluşturun:
query GetBookingPressAppointment($appointmentId: ID!) {
siteURL: optionValue(name: "siteurl")
@remove
restURL: _sprintf(
string: "%s/wp-json/bookingpress/v1/appointments/%s",
values: [$__siteURL, $appointmentId]
)
@remove
bookingpressApiKey: _env(name: "BOOKINGPRESS_API_KEY")
@remove
authorizationHeader: _sprintf(
string: "x-bookingpress-api-key %s",
values: [$__bookingpressApiKey]
)
@remove
appointment: _sendJSONObjectItemHTTPRequest(
input: {
url: $__restURL,
method: GET,
options: {
headers: [
{
name: "Authorization",
value: $__authorizationHeader
}
]
}
}
)
}3. Yanıttan Veri Çıkarma
Yanıttan ihtiyacınız olan belirli özellikleri çıkarabilir ve bunları query'nizde kullanabilirsiniz.
Yanıt nesnesindeki özelliğe gitmek için _underJSONObjectProperty, değeri çıkarıp query'de kullanılabilir hale getirmek için @export kullanın.
query GetBookingPressAppointment($appointmentId: ID!) {
# ...
appointment: _sendJSONObjectItemHTTPRequest(
input: {
url: $__restURL,
method: GET,
options: {
headers: [
{
name: "Authorization",
value: $__authorizationHeader
}
]
}
}
)
@underJSONObjectProperty(by: { path: "data.id" })
@export(as: "appointmentId")
@underJSONObjectProperty(by: { path: "data.selected_date" })
@export(as: "selectedDate")
@underJSONObjectProperty(by: { path: "data.start_time" })
@export(as: "startTime")
@underJSONObjectProperty(by: { path: "data.service_id" })
@export(as: "serviceId")
@underJSONObjectProperty(by: { path: "data.customer_id" })
@export(as: "customerId")
}
query DoSomethingWithTheAppointment @depends(on: "GetBookingPressAppointment") {
{
# Randevu verileriyle bir şeyler yapın
appointmentId: _echo(value: $appointmentId)
selectedDate: _echo(value: $selectedDate)
startTime: _echo(value: $startTime)
serviceId: _echo(value: $serviceId)
customerId: _echo(value: $customerId)
}Diğer Eklentiler için Aynı Kalıp
REST endpoint'leri sunan herhangi bir eklenti için:
- Temel URL'yi ve yolu bulun (ör. eklentinin REST/API belgelerinden).
- Bu URL'yi (veya bunun için bir regex ifadesini) HTTP Client'ın izin verilen listesine ekleyin.
- API kimlik doğrulaması gerektiriyorsa,
_send*alanına verileninput'taoptions.headers(veya basic auth içinoptions.auth) kullanın. - Tek bir kaynak için
_sendJSONObjectItemHTTPRequest, liste için_sendJSONObjectCollectionHTTPRequestkullanın. - Yanıttan ihtiyacınız olan belirli özellikleri çıkarın ve query'nizde kullanın.
Bu REST destekli alanları yerel GraphQL türleriyle (yazılar, kullanıcılar vb.) tek bir query'de birleştirebilirsiniz; böylece istemci, WordPress çekirdek verilerini ve eklenti verilerini REST API'sinden harmanlayan tek bir yanıt alır.
REST çağrıları ve yanıt işlemeye ilişkin daha fazla örnek için HTTP Client uzantısı belgelerine ve harici bir API'den veri alma eğitimine bakın.