Sayfalama ve İteratörler (Pagination)
Shopier REST API tüm liste uç noktalarında sayfalama kullanır. Sayfalama meta verileri HTTP yanıt başlıklarında (headers) döner:
Shopier-Pagination-Page: Mevcut sayfa numarasıShopier-Pagination-Limit: Sayfa başına kayıt sayısıShopier-Pagination-Total-Pages: Toplam sayfa adediShopier-Pagination-Total-Items: Toplam kayıt adedi
SDK, sayfalanmış verilerle çalışmak için iki farklı yöntem sunar:
- Go 1.23+ Range-Over-Func İteratörleri (
All): Nativefor ... rangedöngüsü ile sayfaları otomatik çeken modern yaklaşım. - Manuel Sayfa İstekleri (
List): Sayfa numarası ve limit üzerinde tam kontrol sağlayan klasik yaklaşım.
1. Modern Go 1.23+ Range İteratörleri (All)
All metodu iter.Seq2[T, error] döndürür. Döngü mevcut sayfanın sonuna geldikçe sonraki sayfayı arka planda otomatik olarak ister:
go
ctx := context.Background()
// Tüm siparişleri sayfalama karmaşası olmadan tek bir döngüde dolaşın
for order, err := range client.Orders.All(ctx, nil) {
if err != nil {
log.Fatalf("İterasyon hatası: %v", err)
}
fmt.Printf("Sipariş #%s: %s %s\n", order.ID, order.Totals.Total, order.Currency)
}Filtre parametrelerini All metoduna da iletebilirsiniz:
go
opts := &shopier.OrderListOptions{
FulfillmentStatus: "unfulfilled",
}
for order, err := range client.Orders.All(ctx, opts) {
if err != nil {
log.Fatal(err)
}
fmt.Println("Kargolanacak sipariş:", order.ID)
}2. Manuel Sayfa İstekleri (List)
Ön yüzde sayfalama (pagination) düğmeleri oluştururken veya belirli sayfaları çekerken:
go
opts := &shopier.OrderListOptions{
ListOptions: shopier.ListOptions{
Page: 1,
Limit: 20, // Min: 1, Max: 50, Varsayılan: 10
Sort: "desc",
},
FulfillmentStatus: "unfulfilled",
}
res, err := client.Orders.List(ctx, opts)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Mevcut Sayfa: %d / %d (Toplam Kayıt: %d)\n",
res.Pagination.Page,
res.Pagination.TotalPages,
res.Pagination.TotalItems,
)
for _, order := range res.Items {
fmt.Printf("- Sipariş: %s\n", order.ID)
}
// Sonraki sayfa kontrolü
if res.Pagination.HasNextPage() {
opts.Page = res.Pagination.NextPage()
// Sonraki sayfayı isteyin...
}