DEV Community

Cover image for En İyi Pact Alternatifi
Tobias Hoffmann
Tobias Hoffmann

Posted on Originally published at apidog.com

En İyi Pact Alternatifi

Pact, tüketici odaklı sözleşme testleri için referans araçlardan biridir. Tüketiciler sözleşme üreten birim testleri yazar, sağlayıcılar bu sözleşmeleri gerçek kodlarına karşı doğrular, Pact Broker sonuçları saklar ve can-i-deploy bir sürümün yayın için güvenli olup olmadığını bildirir. Bu döngü, izole birim testlerinin kaçırdığı entegrasyon hatalarını yakalar. Ancak her tüketici için dile özel DSL'ler, sağlayıcı durum komut dosyaları, Broker altyapısı ve yeniden üretilmesi zor sağlayıcı doğrulama hataları da getirir. Birçok ekip, tek bir kararsız entegrasyon sorununu çözmek için küçük bir sözleşme testi platformu işletmeye başlar.

Apidog'u bugün deneyin

Kapsamı netleştirelim: Apidog, temel sorunu üretici ile tüketici arasındaki şema kayması olan ekipler için güçlü bir Pact alternatifidir. Sözleşme oluşturma seremonisini tek bir OpenAPI spesifikasyonuyla değiştirir; yanıtları şemaya göre doğrular, tüketicilerin sağlayıcı hazır olmadan geliştirme yapabilmesi için spesifikasyondan taklitler üretir ve testleri CI içinde Apidog CLI ile çalıştırır.

Apidog, Pact'in tüketici odaklı Broker iş akışını bire bir kopyalamaz: sözleşme dosyası matrisi ve can-i-deploy yoktur. Birçok bağımsız ekibin farklı zamanlarda dağıtım yaptığı ve sürüm uyumluluğunu matris seviyesinde doğrulamanız gereken yapılarda Pact hâlâ doğru araç olabilir.

Pact ne yapar ve nerede güçlüdür?

Pact, HTTP ve mesajlaşma entegrasyonları için kod öncelikli bir sözleşme testi yaklaşımı sunar:

  1. Tüketici, Pact taklit sağlayıcısına karşı test yazar.
  2. Test, somut istek/yanıt çiftlerini bir Pact sözleşme dosyasına kaydeder.
  3. Sağlayıcı, bu etkileşimleri gerçek uygulamasına karşı yeniden oynatarak sözleşmeyi doğrular.
  4. Sağlayıcı durumları, her etkileşim için gereken veriyi hazırlar.
  5. Broker, tüketici ve sağlayıcı sürümlerinin uyumluluk sonuçlarını saklar.

Bu yaklaşımın önemli avantajı şudur: yalnızca tüketicinin kullandığı alanlar sözleşmeye dahil edilir. Sağlayıcı, hiçbir tüketicinin bağlı olmadığı alanları değiştirmekte serbesttir.

Pact Broker, bu doğrulama sonuçlarını dağıtım kararına dönüştürür. can-i-deploy, yayınlamayı planladığınız sürümün hedef ortamda çalışan sürümlerle doğrulanıp doğrulanmadığını kontrol eder:

can-i-deploy
Enter fullscreen mode Exit fullscreen mode
  • Çıkış kodu 0: dağıtım yapılabilir.
  • Çıkış kodu 1: dağıtım engellenmelidir.

Pact; JVM, JavaScript, Go, .NET, Python, Ruby, Rust, PHP ve Swift dahil 10'dan fazla dilde resmi uygulamaya sahiptir. Broker işletmek istemeyen ekipler için PactFlow, yönetilen bir seçenek sunar. Başlangıç seviyesi 2 entegrasyon için ücretsizdir; Ekip planı 50 entegrasyon için aylık 127 dolar olarak listelenir.

Pact operasyonel maliyeti nerede oluşur?

Pact'in zorluğu sözleşme fikri değil, döngünün işletim maliyetidir.

Her tüketici ekibi DSL kodu yazar

Sözleşmeler test kodundan üretildiği için her tüketici ekibi kendi dili için Pact DSL'ini öğrenir. Çok dilli organizasyonlarda bu maliyet katlanır.

Ekiplerin bakımını yaptığı parçalar şunlardır:

  • Eşleştirme kuralları
  • Taklit sağlayıcı kurulumu
  • Test fixture'ları
  • Sözleşme üretim kodu
  • DSL sürüm yükseltmeleri

Sağlayıcı durumları ayrı bir test paketi haline gelir

Her Pact etkileşimi bir sağlayıcı durumu gerektirebilir:

“42 numaralı kullanıcı, ödenmemiş faturasıyla mevcut.”

Sağlayıcı ekibi bu durumları oluşturacak handler'ları ve veri kurulumlarını korur. Tüketici sayısı arttıkça, sağlayıcı uygulaması tüketicilerin istediği veri şekillerini destekleyen bir durum kataloğuna dönüşebilir.

Broker bir altyapı bileşenidir

Kendi kendine barındırılan Pact Broker şunları gerektirir:

  • Veritabanı yönetimi
  • Kimlik doğrulama
  • Yükseltmeler
  • Web kancaları
  • CI entegrasyonları
  • Dal, ortam ve sürümleme disiplini

Yönetilen çözüm seçildiğinde altyapı yükü azalır; ancak yeni bir SaaS bağımlılığı ve fiyatlandırma modeli eklenir.

Sağlayıcı doğrulaması kararsız olabilir

Sağlayıcı doğrulaması, tüketicinin kaydettiği istekleri çalışan bir sağlayıcı örneğine karşı yeniden oynatır. Bu nedenle test ortamı şunlara bağımlı hale gelir:

  • Veritabanı tohum verileri
  • Kimlik doğrulama saplamaları
  • Arka plan işleri
  • Harici servis bağımlılıkları
  • Sağlayıcı durumu kurulumu

Yapı başarısız olduğunda, başarısız testi başka bir ekibin yazmış olması hata ayıklamayı zorlaştırır. Bu noktada ekipler zaman zaman kontrolleri atlamaya başlar.

PactFlow'un çift yönlü sözleşme testi yaklaşımı da yeniden oynatma ihtiyacını azaltır: sağlayıcı OpenAPI belgesi yayınlar, tüketiciler kendi sözleşmelerini yayınlar ve ikisi statik olarak karşılaştırılır. Bu yaklaşım, birçok entegrasyonda şema karşılaştırmasının yeterli olduğunu kabul eder. Aynı yaklaşımı çift yönlü sözleşme testi bağlamında da inceleyebilirsiniz.

Apidog yaklaşımı: OpenAPI spesifikasyonunu sözleşme yapmak

Apidog, tek bir OpenAPI spesifikasyonunu API geliştirme sürecinin merkezi yapar. Aynı spesifikasyondan dokümantasyon, taklit sunucular, test senaryoları ve şema doğrulama kuralları üretilir.

Bir API sözleşme testi yaklaşımı olarak temel prensip şudur:

Spesifikasyonu sözleşme olarak tanımlayın, ardından bu sözleşmeyi geliştirme, test ve CI süreçlerinde mekanik olarak uygulayın.

1. Tek sözleşme, DSL olmadan

OpenAPI dosyası üretici ile tüketicinin ortak anlaşmasıdır.

Örneğin, bir kullanıcı uç noktası için sözleşme şöyle tanımlanabilir:

paths:
  /users/{id}:
    get:
      responses:
        "200":
          description: Kullanıcı bulundu
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - name
                  - email
                properties:
                  id:
                    type: integer
                  name:
                    type: string
                  email:
                    type: string
                    format: email
Enter fullscreen mode Exit fullscreen mode

Bu sözleşmede:

  • id, name ve email zorunludur.
  • id sayı olmalıdır.
  • email, e-posta biçiminde olmalıdır.

Tüketici ekipleri beş farklı dilde sözleşme DSL'i yazmak yerine aynı OpenAPI belgesini kullanır.

2. Her çalıştırmada şema doğrulama

Apidog'da yapılan istekler ve CI test senaryoları, yanıtları OpenAPI şemasına karşı doğrulayabilir.

Bu sayede aşağıdaki değişiklikler test sırasında görünür hale gelir:

  • Alanın yeniden adlandırılması
  • Alan türünün değiştirilmesi
  • Zorunlu alanın kaldırılması
  • Beklenmeyen hata yanıtı şekli
  • Enum değerinin değiştirilmesi

Örneğin, sağlayıcı email alanını yanlışlıkla mailAddress olarak değiştirirse, şema doğrulaması sözleşme ihlalini yakalar. Bunun için tüketicinin ayrıca Pact doğrulaması yazması gerekmez.

3. Tüketiciler sağlayıcıdan önce geliştirmeye başlayabilir

Apidog'un akıllı taklit sunucusu, spesifikasyon tanımlandığında şemaya uygun yanıtlar üretebilir. Böylece ön yüz veya alt akım ekipleri gerçek servis tamamlanmadan geliştirmeye başlayabilir.

Pratik akış:

  1. Üretici ekip OpenAPI sözleşmesini oluşturur veya günceller.
  2. Tüketici ekip taklit URL'ini kullanır.
  3. Tüketici, şemaya uygun örnek yanıtlarla entegrasyonunu geliştirir.
  4. Sağlayıcı hazır olduğunda aynı sözleşmeye göre doğrulanır.

Özel durumlar gerektiğinde özel beklentiler tanımlanabilir. Ancak temel taklit davranışı için ayrı sağlayıcı durumu handler'ları yazmanız gerekmez.

4. Broker olmadan CI doğrulaması

Apidog CLI ile test senaryolarını CI içinde çalıştırabilirsiniz:

apidog run
Enter fullscreen mode Exit fullscreen mode

Önerilen işlem sırası:

  1. Sağlayıcı uç noktaları için test senaryoları oluşturun.
  2. Yanıt şeması doğrulamasını etkinleştirin.
  3. Her pull request veya ana dal derlemesinde CLI çalıştırın.
  4. Şema ihlali varsa yapıyı başarısız yapın.
  5. Dağıtımdan önce sözleşme uyumluluğunu sağlayıcı hattında kontrol edin.

Bu yaklaşım, “bozucu değişiklik göndermeyin” kontrolünü Broker matrisi yerine sağlayıcının kaynak ve CI sürecinde uygular.

Pact'ten Apidog'a geçiş modeli

Sözleşme artefaktı

Pact'te sözleşme, tüketicinin testlerinden oluşturulan JSON etkileşim dosyasıdır. Apidog'da sözleşme OpenAPI spesifikasyonudur.

Bu değişimin bir takası vardır:

  • Pact, tüketici başına hangi alanların kullanıldığını doğrudan gösterir.
  • Paylaşılan OpenAPI spesifikasyonu bu kullanım sinyalini tüketici bazında taşımaz.

Buna karşılık OpenAPI yaklaşımı; dokümantasyonun, taklitlerin, testlerin ve istemcilerin üzerinde anlaştığı tek bir yapı sağlar. Daha fazla bağlam için API sözleşmesi nedir? içeriğine bakabilirsiniz.

Sağlayıcı doğrulama

Pact, tüketici etkileşimlerini canlı sağlayıcıya karşı yeniden oynatır.

Apidog'da eşdeğer uygulama şudur:

  1. Sağlayıcının uç noktaları için test senaryoları oluşturun.
  2. Senaryoları gerçek uygulama ortamına karşı çalıştırın.
  3. Yanıt şeması doğrulamasını etkinleştirin.
  4. Testleri CI içinde apidog run ile çalıştırın.

Sağlayıcı yine sözleşmeye göre doğrulanır; ancak tüketici tarafından yazılmış sağlayıcı durumu kataloğunu yönetmeniz gerekmez.

Tüketici geliştirme

Pact'te her tüketici test içinde çalışan bir taklit sağlayıcı kullanır.

Apidog'da tüketiciler, spesifikasyondan türetilen paylaşılabilir bir taklit URL'i kullanır. Bu yöntem, özellikle ön yüz ve mobil ekiplerin sağlayıcı geliştirmesi tamamlanmadan çalışması gerektiğinde pratiktir.

Taklit yaklaşımlarının karşılaştırması için sözleşme testi ve taklit sunucular yazısına göz atabilirsiniz.

Dağıtım geçitleme

Pact'in en güçlü tarafı dağıtım matrisi ve can-i-deploy kontrolüdür. Apidog bunu bire bir sağlamaz.

Apidog'un yaklaşımı sözleşme seviyesinde geçitlemedir:

  • Sağlayıcı, spesifikasyonu ihlal ederse kendi CI hattı başarısız olur.
  • Spesifikasyon değişiklikleri görünür, gözden geçirilmiş değişiklikler olarak yönetilir.
  • Taklitler ve belgeler aynı sözleşmeden güncellenir.

Birkaç koordineli hattın bulunduğu yapılarda bu yaklaşım çoğu ihtiyacı karşılayabilir. Buna karşılık onlarca ekibin bağımsız zamanlarda dağıtım yaptığı sistemlerde matris seviyesinde geçitleme hâlâ önemlidir.

Pact + PactFlow ve Apidog karşılaştırması

Özellik Pact + PactFlow Apidog
Sözleşme artefaktı Tüketici başına oluşturulmuş sözleşme dosyaları Tek OpenAPI spesifikasyonu
Sözleşme kodunu kim yazar? Her tüketici ekibi, dile özel DSL ile Spesifikasyon görsel olarak veya kodla düzenlenir
Sağlayıcı doğrulama Etkileşim yeniden oynatma + sağlayıcı durumları Test senaryoları + otomatik şema doğrulama
Tüketici taklitleri Test içi taklit sağlayıcı Spesifikasyondan barındırılan akıllı taklit
Kayma algılama Sağlayıcı doğrulama çalıştırmalarında İsteklerde ve CI testlerinde
Dağıtım geçitleme Broker matrisi + can-i-deploy Hizmet başına sözleşme geçitli CI
Altyapı Broker veya PactFlow SaaS Ekstra Broker gerekmez; bulut çalışma alanı dahil
Belgeler ve tasarım Kapsam dışı Etkileşimli dokümantasyon ve görsel spesifikasyon düzenleyici
Maliyet OSS ücretsiz; PactFlow 2 entegrasyon için ücretsiz, Ekip aylık 127$ 4 kullanıcıya kadar ücretsiz; ücretli planlar kullanıcı başına aylık 9$'dan başlar

Maliyet ve uygunluk hesabı

Pact kütüphaneleri açık kaynaklıdır; lisans maliyeti yoktur. Ancak gerçek maliyet koordinasyondur:

  • Broker barındırma veya PactFlow aboneliği
  • DSL testlerinin bakımı
  • Sağlayıcı durum handler'ları
  • Tüketici-sağlayıcı doğrulama hata ayıklaması
  • Sürüm ve ortam yönetimi

Bu maliyet, entegrasyon ve ekip sayısıyla birlikte büyür.

Apidog'un ücretsiz planı 4 kullanıcıya kadar; spesifikasyon düzenleme, sınırsız taklit sunucu kullanımı, test senaryoları, şema doğrulama ve CLI çalıştırmalarını kapsar. Ücretli planlar kullanıcı başına aylık 9 dolardan başlar.

Buradaki tercih yalnızca lisans fiyatı değildir. Asıl soru şudur:

  • Sözleşme test mekanizmasını ayrı bir platform olarak mı işletmek istiyorsunuz?
  • Yoksa API istemcisi, spesifikasyon, dokümantasyon, taklit ve test süreçlerini aynı platformda mı toplamak istiyorsunuz?

Araçları birleştirme hedefiniz varsa en iyi Postman alternatifi yazısından başlayabilirsiniz. Spec-first yaklaşımın parçalarını görmek için sözleşme odaklı geliştirme araç yığını içeriğine de bakabilirsiniz.

Pact'ten geçiş: uygulanabilir adımlar

Sözleşme dosyalarını doğrudan dönüştürmek yerine OpenAPI spesifikasyonunu ana sözleşme haline getirin.

1. Gerçek bir OpenAPI spesifikasyonu oluşturun veya içe aktarın

Mevcut bir OpenAPI dosyanız varsa Apidog'a aktarın. Bu dosya doğrudan dokümantasyon, taklit ve doğrulama kurallarının kaynağı olur.

Spesifikasyonunuz yoksa:

  • Kod açıklamalarından başlangıç spesifikasyonu üretin.
  • Pact sözleşmelerini tüketicilerin kullandığı uç noktalar için kontrol listesi olarak kullanın.
  • Zorunlu alanları, hata yanıtlarını, enum değerlerini ve örnekleri açıkça tanımlayın.
  • Spesifikasyonu kod inceleme sürecine dahil edin.

2. Sağlayıcı CI hattında şema doğrulamasını etkinleştirin

Sağlayıcı uç noktaları için test senaryoları yazın ve her derlemede çalıştırın:

apidog run
Enter fullscreen mode Exit fullscreen mode

Hedef, aşağıdaki değişikliklerin dağıtımdan önce başarısız olmasıdır:

  • Beklenmeyen yanıt gövdesi
  • Kaldırılmış zorunlu alan
  • Değişen veri türü
  • Uyumsuz hata yanıtı
  • Sözleşmeyle uyuşmayan enum değeri

3. Tüketicileri taklit URL'ine yönlendirin

Tüketici başına Pact taklit kurulumlarını, spesifikasyondan üretilen paylaşılabilir taklit URL'i ile değiştirin.

Geçişi aşamalı yapabilirsiniz:

  1. Bir tüketici seçin.
  2. Pact mock bağımlılığını taklit URL'i ile değiştirin.
  3. Tüketici testlerini ve geliştirme ortamını güncelleyin.
  4. Kullanılmayan DSL kodunu kaldırın.
  5. Sonraki tüketiciye geçin.

4. Dağıtımları değil, spesifikasyon değişikliklerini gözden geçirin

OpenAPI değişikliklerini dal tabanlı ve gözden geçirilmiş değişiklikler olarak yönetin.

Özellikle şu değişiklikleri görünür hale getirin:

  • Zorunlu alan ekleme veya kaldırma
  • Alan türü değiştirme
  • Endpoint kaldırma
  • URL parametresi değiştirme
  • Hata yanıtı şemasını değiştirme

Bu yaklaşım bozucu değişiklikleri üretime ulaşmadan önce tasarım aşamasında tartışılabilir hale getirir.

5. Broker'ı en son emekliye ayırın

Bazı entegrasyonlarda can-i-deploy gerçek bir risk kontrolü olabilir. Özellikle bağımsız dağıtım zamanlaması olan ekiplerde Broker'ı hemen kaldırmayın.

Önce şema doğrulama ve taklit akışının yeterli olduğundan emin olun. Pact'i yalnızca matrise dayalı dağıtım geçitlemesine gerçekten ihtiyaç duyduğunuz entegrasyonlarda tutun.

Pact hangi durumlarda hâlâ anlamlıdır?

Pact şu koşullarda güçlü bir seçenektir:

  • Birçok ekip servislerini bağımsız zaman çizelgelerinde dağıtıyorsa
  • “Bu sürüm, hedef ortamda çalışan tüm sürümlerle uyumlu mu?” sorusuna makine tarafından doğrulanabilir yanıt gerekiyorsa
  • Tüketici bazında alan kullanımını takip etmek önemliyse
  • Mesaj kuyruğu sözleşme testi ana gereksinimse
  • can-i-deploy ile sürüm matrisi tabanlı dağıtım kararı vermeniz gerekiyorsa

Yeniden oynatma seremonisini azaltmak ancak Pact ekosisteminde kalmak istiyorsanız PactFlow'un çift yönlü modu bir ara seçenek olabilir.

Buna karşılık temel sorununuz şema kayması, taklit sunucular ve CI kontrolleriyse; Pact'in tam operasyonel maliyetini, ihtiyaç duyduğunuz faydanın yalnızca bir kısmı için ödüyor olabilirsiniz.

Sıkça sorulan sorular

Apidog, Pact gibi bir sözleşme testi aracı mıdır?

Sözleşmeyi farklı şekilde uygular. Pact, tüketici testlerinden sözleşme dosyaları üretir ve bunları sağlayıcıya karşı yeniden oynatır. Apidog, OpenAPI spesifikasyonunu sözleşme kabul eder ve istekleri ile CI testlerini bu şemaya göre doğrular. Ayrıntılar için API sözleşme testi yazısına bakabilirsiniz.

Apidog, can-i-deploy veya Pact Broker destekliyor mu?

Hayır. Apidog'da doğrulama matrisi ya da servisler arası dağıtım geçidi yoktur. Kontrol, sözleşme seviyesinde uygulanır: spesifikasyonu ihlal eden sağlayıcı yapısı kendi CI hattında başarısız olur.

Matris seviyesinde geçitlemeye ihtiyacınız varsa ilgili entegrasyonlar için Pact kullanmaya devam edebilirsiniz. Statik karşılaştırma yaklaşımı için çift yönlü sözleşme testi içeriğine bakın.

Apidog, Pact tüketici taklitlerinin yerini alabilir mi?

Çoğu kullanım için evet. Akıllı taklit sunucusu, sıfır kurulumla spesifikasyondan şemaya uygun yanıtlar üretir. Belirli durumlar için özel beklentiler de tanımlayabilirsiniz. Tüketici ekipleri taklit sağlayıcı DSL'i yazmak yerine paylaşılan sözleşme URL'ine karşı geliştirme yapar.

Daha fazla araç karşılaştırması için sözleşme testi ve taklit araçları yazısına göz atın.

Sağlayıcıyı spesifikasyona karşı fuzzing yapmak ne anlama gelir?

Apidog senaryo testlerini spesifikasyon tabanlı bir özellik testi aracıyla birleştirmek, örnek yeniden oynatmaya göre daha geniş negatif test kapsamı sağlayabilir. Bu yaklaşımı Schemathesis nedir? yazısında inceleyebilirsiniz.

PactFlow, Apidog'a göre ne kadar maliyetlidir?

PactFlow'un Başlangıç seviyesi 2 entegrasyon için ücretsizdir. Ekip seviyesi, 50 entegrasyon için aylık 127 dolar olarak listelenir; yıllık yaklaşık 1.385 dolar faturalandırılır. Kurumsal seviye özel fiyatlandırmadır.

Apidog, 4 kullanıcıya kadar ücretsizdir; ücretli planlar kullanıcı başına aylık 9 dolardan başlar. Sözleşme özellikleri ayrı bir Broker ürünü olarak fiyatlandırılmaz. Kayıt-yeniden oynatma araçlarını değerlendiriyorsanız en iyi Keploy alternatifi yazısına da bakabilirsiniz.

Seremoniyi azaltın, sözleşmeyi koruyun

Pact kurulumunuzun temel amacı şema kaymasını yakalamaksa, aynı korumayı tek bir OpenAPI spesifikasyonundan sağlayabilirsiniz:

  1. OpenAPI dosyanızı içe aktarın.
  2. Sağlayıcı test senaryolarını oluşturun.
  3. Şema doğrulamasını etkinleştirin.
  4. apidog run komutunu CI hattına ekleyin.
  5. Tüketicilere taklit URL'ini verin.
  6. Kullanılmayan Pact DSL ve sağlayıcı durumu kodlarını aşamalı olarak kaldırın.

Apidog'u indirin veya tarayıcıdan başlayın. Dört kişilik ekipler ücretsiz planla başlayabilir; asıl kazanım ise bakımını yapmanız gerekmeyen Broker, DSL ve sağlayıcı durumu seremonisidir.

Top comments (0)