6 puan yazan GN⁺ 2024-01-08 | 1 yorum | WhatsApp'ta paylaş
  • PocketBase, gerçek zamanlı veritabanı, kimlik doğrulama, dosya depolama ve yönetici panosunu tek bir dosyada birleştirerek küçük backend’leri hızlıca kurmayı sağlar
  • Yerleşik veritabanı; şema oluşturucu, veri doğrulama, gerçek zamanlı abonelikler ve REST API’yi birlikte sunarak ayrı bir backend yapılandırma yükünü azaltır
  • Kullanıcı yönetimi e-posta/parola ile kayıt ve OAuth2 ile kayıt desteği sunar; Google, Facebook, GitHub ve GitLab kullanılabilir
  • Dosyalar yerelde veya S3 depolama üzerinde saklanabilir; veritabanı kayıtlarına medya eklenebilir ya da anında küçük resim oluşturulabilir
  • Bağımsız bir uygulama olarak başlayıp Go ve JavaScript hook’larıyla genişletilebildiği için özel taşınabilir backend oluşturmayı kolaylaştırır

Tek dosyaya sığdırılmış backend özellikleri

  • PocketBase, gerçek zamanlı veritabanı, kimlik doğrulama, dosya depolama ve yönetici panosunu tek dosya olarak sunan açık kaynak bir backend’dir
  • Yerleşik veritabanı

    • Performansı öne çıkaran yerleşik veritabanında şema oluşturucu bulunur
    • Veri doğrulama, gerçek zamanlı abonelikler ve kullanımı kolay bir REST API sunar

Kullanıcı kimlik doğrulaması ve kayıt

  • Uygulama kullanıcılarını yönetebilir ve e-posta/parola tabanlı kayıtları işleyebilirsiniz
  • OAuth2 ile kayıt da desteklenir; Google, Facebook, GitHub ve GitLab dahildir

Dosya depolama ve medya işleme

  • Dosyalar yerelde veya S3 depolama üzerinde saklanabilir
  • Veritabanı kayıtlarına medya eklenebilir ve anında küçük resim oluşturulabilir

Kullanım biçimi ve genişletme

  • PocketBase bağımsız uygulama olarak kullanılabilir
  • Bir framework gibi kullanıldığında Go ve JavaScript hook’larıyla genişletilebilir
  • Bu yöntemle özel, taşınabilir backend’ler oluşturulabilir

JavaScript SDK örneği

  • JavaScript SDK, PocketBase’i içe aktararak http://127.0.0.1:8090 gibi bir adresle istemci oluşturur
  • pb.collection('example').getList() ile koleksiyon kayıtlarının listesi alınabilir ve arama yapılabilir
    • Örnekte title != "" && created > "2022-08-01" filtresi ve -created,title sıralaması kullanılır
  • getOne('RECORD_ID'), delete('RECORD_ID'), create() ile tekil kayıt getirme, silme ve oluşturma yapılır
  • subscribe('*', ...) ile koleksiyon kaydı değişikliklerine abone olunur, unsubscribe() ile abonelik durdurulur

1 yorum

 
GN⁺ 2024-01-08
Hacker News yorumları
  • Uygulamamın backend/veritabanı olarak PocketBase kullandım; harikaydı. Frontend tarafında React ve Vite kullanıyorum.
    Ağırlıklı olarak kimlik doğrulama ve ücretli/ücretsiz hesap takibi için kullanıyorum. Barındırması çok kolay; Appwrite veya Supabase'i kendi kendine barındırmaktan daha az zahmetliydi. Özellikle Supabase zorluydu; Appwrite'ı CapRover ile hızlıca ayağa kaldırabildim ama ihtiyacım olana göre fazla kapsamlıydı.
    View collection ile yalnızca gerekli verinin bir kısmını döndürmek kolaydı; kullanıcılar ve ücretli kullanıcılar koleksiyonlarını join edip yalnızca ücretli dönemi döndürmek gibi kullanıyorum: https://pocketbase.io/docs/collections/#view-collection
    Go veya JS ile genişletilebildiği için, gereksinimler çok karmaşık değilse backend'i tamamen atlamak bile mümkün görünüyor: https://pocketbase.io/docs/use-as-framework/

    • Barındırmasının çok kolay olduğu daha fazla vurgulanmalı. Sunucuya tek bir binary dosyası koyup hemen başlatabilecek düzeyde; keşke daha fazla araç bu kadar basit olsa.
  • PocketBase ile 2 aydır geliştirme yapıyorum ve 1-2 ay içinde production'a geçmeyi planlıyorum.
    Bir arkadaşımın şirketi için web uygulaması yaparken devretmesi kolay, basit bir sistem istedim; tamamı tek bir binary olan PocketBase ile çalışıyor. Web sunucusu, sunucu tarafı JavaScript (derlenmiş TypeScript) ve SQLite veritabanı tek bir process içinde; Vultr'da ayda 12 dolara barındırıyorum. Frontend'i SvelteKit static adapter + Svelte + TypeScript ile yazdım.
    PocketBase iyi yapılmış; geliştiricisi sorulara çok hızlı ve net yanıt verdi. Yine de dokümantasyonda biraz boşluk var, CSV yükleyiciyi kendim yazmam gerekti ve CRUD arayüzüyle çok sayıda nesne yazınca yavaşlıyor. Sunucu tarafı kodla daha hızlı yazmak mümkün. Sunucu tarafı JavaScript birim testlerini de biraz zorlayarak eklemem gerekti; Copilot/ChatGPT'nin sorulara daha iyi cevap verebilmesini de isterdim.
    Web sunucusunun 404 sayfasını ayarlamanın bir yolu yok ve binary'nin dosya sistemindeki konumunun önemli olması gibi tuhaf bir nokta da var. Geliştiricinin kendi kullanımına göre tasarlanmış taraflar olduğu için bu tercihleri kabullenmek gerekiyor.
    Yine de gereksinimlere tam uydu. Basitti ve tüm kodu tek dil olarak TypeScript ile yazabildim. Yüksek performanslı değil ama buna ihtiyacım yoktu; iş bitince bir yan projeyi de PocketBase ile yapmayı düşünüyorum. O kadar kolay. Sözleşmenin bir parçası olarak arkadaşımın şirketi PocketBase'e bağış yapmayı da kabul etti.

  • PocketBase'i birkaç aydır production ortamında kullanıyorum; frontend'de alpinejs kullanıyorum.
    Geliştirme felsefesi tam olarak yerine oturuyor. Gerçek amacını iyi yerine getiren, keyifli ve pratik bir yazılım; özellik şişkinliği olmadan her hafta gelişiyor.
    Ancak ana akıma yaklaştıkça tartışmaların ve issue'ların giderek yorucu hâle geldiğini görüyorum; geliştiricinin şimdiye kadar sunduğu destek seviyesini sürdürmeye çalışırken tükenmesinden endişeliyim.
    Bununla para kazanan biriyseniz projeyi Open Collective üzerinden mutlaka desteklemenizi güçlü şekilde öneririm.

    • Stack'te başka hangi teknolojileri kullandığınızı merak ediyorum.
  • PocketBase'i ilk dönemlerinden beri takip ediyorum; bu projenin en iyi yanı karmaşıklıktan aktif biçimde kaçınması ve basit, minimal bir yaklaşıma odaklanması.
    Sunucuya tek bir binary yüklemekle deployment'ın bitmesi de çok çekici. Backend'e JavaScript desteği geldikten sonra Remix, Next.js gibi framework'lere meydan okuyabilecek ciddi bir aday hâline geldiğini hissediyorum. v1'i merakla bekliyorum.

    • Artık backend gereken neredeyse her yerde PocketBase kullanıyorum. Bir keresinde doğrudan SQL join yazmam gerekti; URL parametrelerini koyup yalnızca kimliği doğrulanmış kullanıcıya göre seçim yapan bir sorgu yazma süreci şaşırtıcı derecede kolaydı.
      Aslında tüm veriyi çekip Node'da işleyebilirdim ama bunu PocketBase içinde çözmek yeterince basitti. Next veya Remix'in yerini alacağını söylemek zor; ama stack'e ekleyip basitleştirmek için şiddetle öneririm.
  • SQLite veritabanının üzerine doğrudan kullanabileceğim bir frontend arıyordum. Vivino'yu sildim, çünkü verilerimi paylaşan 800'den fazla partner vardı.
    Şarap koleksiyonumu tasarlayıp saklamak istiyorum; dizüstü bilgisayarımda tutup yedeklemeye dahil edebileceğim tek bir çalıştırılabilir dosya, admin arayüzü ve veritabanı kombinasyonu tam aradığım şey gibi görünüyor. Bu yüzden hep HN'e geri dönüyorum.

  • Bu alanda iyi açık kaynak projelerin çoğalmasını görmek güzel. Grist ve NocoDB de anılmaya değer; ikisi daha çok veritabanı yönetimi tarafına odaklanıyor.
    Başlama yolunu tek dosya veya Electron biçiminde çok basit sunmaları da etkileyici.
    https://github.com/gristlabs
    https://nocodb.com/

    • İkisini de bilmiyordum. Küçük projeler için Baserow kullanıyordum; bu tür durumlarda PocketBase çok daha uygun görünüyor.
  • Dokümantasyona göz attım ama bazı şeyleri nasıl ele aldığı net değil.
    Örneğin satır seviyesinde erişim kontrolüyle kullanıcıların yalnızca kendi verilerine erişmesini sağlama, e-posta gönderimi veya trigger gibi dış entegrasyonlar, CSV dışa/içe aktarma ve uluslararasılaştırma konularını merak ediyorum. Bunların hepsinin mümkün ve sezgisel olup olmadığını, yoksa hepsinin Go veya JS extension gerektirip gerektirmediğini bilmek isterim. Aracın kendisi iyi görünüyor.

    • PocketBase ile 2 aydır geliştirme yapıyorum.
      Başkalarının söylediği gibi API rules ile satır erişimini kontrol edebilirsiniz. E-posta gönderme, timer ayarlama, başka bir web sunucusuna request gönderme de mümkün. Kendim kullanmadım ama dokümantasyonu var: https://pocketbase.io/docs/js-sending-emails/
      CSV içe aktarmayı kendim yazmam gerekti; açık kaynak olarak yayımlamayı düşünüyorum. Uluslararasılaştırma hangi özelliği istediğinize bağlı, ama genel olarak frontend tarafına daha yakın bir işlev gibi görünüyor.
    • API rules ve hook'lara bakmak gerekiyor.
      API Rules: https://pocketbase.io/docs/api-rules-and-filters/#api-rules
      Hooks: https://pocketbase.io/docs/js-overview/
      Admin panelinde veri yedekleme ve koleksiyon şeması içe/dışa aktarma var.
    • İlk madde olan kimlik doğrulama/erişim kontrolü, genişletilmemiş temel framework'te bile filter rules ile ele alınıyor.
      Geri kalanı, doğrulama e-postaları hariç, çoğunlukla extension gerektiriyor; ancak extension'ın en basit biçimi, kayıt yaşam döngüsü event'lerine sıradan JavaScript fonksiyonları eklemek kadar basit. Genelde ekleme/düzenleme/silme işlemlerinden önce veya sonra çalışıyor. Dosya sistemi, şifreleme, HTTP ve e-posta işleri için çeşitli Go API'leri JavaScript runtime'a açılmış durumda.
      Uluslararasılaştırma template'ler ve veritabanıyla ele alınabilir.
  • Supabase ve Appwrite dahil denediğim tüm PaaS'ler arasında PocketBase en iyisiydi. Performansı iyi, özellikleri sezgisel, gerçekten kendi kendine barındırılabilir ve dağıtımı keyifli.

  • Bir mobil uygulamanın production ortamında birkaç aydır PocketBase kullanıyorum; şu ana kadar çok rahat geçti.
    JS SDK ile birlikte kullanınca, makine öğrenmesi gibi özel kütüphaneler gerekmeyen her durumda artık varsayılan backend framework'üm olarak seçiyorum.

  • PocketBase harika olduğu için küçük bir Nuxt 3 starter hazırladım: https://github.com/fayazara/pocketbase-nuxt
    Örnekte kimlik doğrulama, route rules, CRUD işlemleri, real-time event'ler ve storage var. Refactoring gerekiyor ama üzerinde çalışmak gerçekten çok keyifliydi; buna Stripe aboneliklerini ekleyip route rules'un sınırlarını zorlamak istiyorum. Henüz nasıl yapılacağını bilmiyorum ama araştıracağım.