DEV Community

Cover image for Alternatif Terbaik Pact
Walse
Walse

Posted on Originally published at apidog.com

Alternatif Terbaik Pact

Pact adalah alat referensi untuk pengujian kontrak yang digerakkan oleh konsumen. Konsumen menulis pengujian unit yang menghasilkan kontrak, penyedia memverifikasi kontrak tersebut terhadap kode aslinya, Pact Broker menyimpan hasilnya, dan can-i-deploy menentukan apakah suatu versi aman dirilis. Siklus ini efektif untuk menangkap kegagalan integrasi yang tidak terlihat dalam pengujian unit terisolasi, tetapi juga menambah DSL per bahasa, state penyedia, broker, dan debugging lintas tim.

Coba Apidog hari ini

Jawaban singkatnya: Apidog adalah alternatif Pact yang tepat jika masalah utama tim Anda adalah perbedaan skema antara produsen dan konsumen. Gunakan satu spesifikasi OpenAPI sebagai sumber kebenaran, validasi respons terhadap spesifikasi di setiap pengujian, sediakan mock dari spesifikasi, lalu jalankan skenario tersebut di CI melalui Apidog CLI.

Namun, Apidog tidak mereplikasi workflow broker Pact yang digerakkan oleh konsumen: tidak ada file kontrak per konsumen, matriks verifikasi, atau can-i-deploy. Jika banyak tim melakukan deploy independen dan membutuhkan gerbang rilis lintas layanan, Pact tetap relevan.

Apa yang dilakukan Pact dengan baik

Pact adalah alat code-first untuk menguji integrasi HTTP dan pesan. Alurnya berbasis konsumen:

  1. Konsumen menjalankan pengujian terhadap mock provider Pact.
  2. Pengujian menghasilkan file kontrak dari pasangan request/response.
  3. Provider memverifikasi kontrak dengan memutar ulang request terhadap implementasi aslinya.
  4. Provider state menyiapkan data yang dibutuhkan tiap interaksi.
  5. Pact Broker menyimpan hasil verifikasi dan menghubungkannya ke versi layanan.

Contohnya, sebuah konsumen dapat mendefinisikan bahwa endpoint berikut harus menyediakan id dan name:

GET /users/42
Enter fullscreen mode Exit fullscreen mode

Provider kemudian harus dapat memenuhi ekspektasi tersebut saat kontrak diverifikasi.

Pact Broker menambahkan mekanisme deployment. Setiap pasangan versi konsumen dan provider yang berhasil diverifikasi masuk ke matriks. Perintah can-i-deploy memeriksa apakah versi yang akan dirilis sudah kompatibel dengan versi layanan lain di environment target:

  • Exit code 0: aman dirilis.
  • Exit code 1: jangan rilis.

Pact tersedia dalam lebih dari 10 bahasa, termasuk JVM, JavaScript, Go, .NET, Python, Ruby, Rust, PHP, dan Swift. Untuk broker terkelola, SmartBear menyediakan PactFlow, dengan paket Starter gratis untuk 2 integrasi, paket Team seharga $127 per bulan untuk 50 integrasi, serta paket Enterprise dengan harga khusus.

Di mana kompleksitas Pact mulai menumpuk

Masalahnya bukan kemampuan Pact untuk menemukan ketidaksesuaian kontrak. Masalahnya adalah biaya operasional untuk mempertahankan siklus tersebut.

1. Setiap konsumen menulis DSL kontrak

Kontrak Pact dihasilkan dari kode pengujian. Artinya, setiap tim konsumen harus mempelajari dan memelihara DSL Pact pada bahasanya sendiri.

Dalam organisasi poliglot, ini berarti beberapa implementasi DSL, aturan pencocokan, setup mock, dan pola pengujian yang harus terus ditinjau serta direfaktor.

2. Provider state menjadi suite pengujian tersembunyi

Setiap interaksi bisa membutuhkan kondisi awal seperti:

Pengguna 42 ada dan memiliki faktur yang belum dibayar.

Provider harus menulis handler untuk membuat kondisi itu. Saat jumlah konsumen meningkat, provider juga mewarisi katalog state yang kebutuhannya ditentukan oleh tim lain.

3. Broker adalah infrastruktur tambahan

Broker yang di-host sendiri membutuhkan:

  • Database
  • Upgrade dan pemeliharaan
  • Autentikasi
  • Webhook ke CI
  • Konvensi versi, branch, environment, dan kontrak tertunda

Menggunakan broker terkelola mengurangi pekerjaan infrastruktur, tetapi tetap menambah vendor dan workflow yang harus dipahami semua tim.

4. Verifikasi provider sulit direproduksi

Verifikasi Pact menjalankan request konsumen terhadap provider nyata. Ini melibatkan seluruh runtime provider:

  • Seed database
  • Stub autentikasi
  • Job latar belakang
  • Service dependency
  • Konfigurasi environment

Saat build gagal, kontrak yang gagal bisa ditulis oleh tim lain dan memblokir deployment melalui can-i-deploy. Debugging lintas tim seperti ini sering menjadi titik ketika pemeriksaan mulai dilewati.

PactFlow juga menawarkan pengujian kontrak dua arah. Pada pendekatan ini, provider menerbitkan OpenAPI dan konsumen menerbitkan kontrak turunan mock, lalu keduanya dibandingkan secara statis. Untuk banyak integrasi, membandingkan skema memang sudah cukup. Konsep ini juga dibahas dalam pengujian kontrak dua arah.

Pendekatan Apidog: spesifikasi sebagai kontrak

Apidog adalah platform pengembangan API yang menggunakan spesifikasi OpenAPI sebagai pusat workflow. Dari spesifikasi yang sama, Anda dapat menghasilkan dokumentasi, mock server, validasi request/response, dan pengujian otomatis.

Pendekatannya sederhana: jadikan spesifikasi sebagai kontrak, lalu terapkan kontrak itu secara mekanis di seluruh workflow. Detail konsepnya tersedia dalam pengujian kontrak API.

1. Satu kontrak, tanpa DSL per konsumen

Spesifikasi OpenAPI menjadi perjanjian antara provider dan konsumen.

Contoh sederhana:

openapi: 3.0.3
paths:
  /users/{id}:
    get:
      responses:
        "200":
          description: Data pengguna
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - name
                properties:
                  id:
                    type: integer
                  name:
                    type: string
Enter fullscreen mode Exit fullscreen mode

Tim dapat mengedit spesifikasi tersebut secara visual atau sebagai kode. Tidak perlu membuat kode pembentukan kontrak di setiap bahasa konsumen.

2. Validasi skema pada setiap eksekusi

Saat request dijalankan melalui Apidog atau skenario pengujian di CI, respons dapat divalidasi terhadap spesifikasi.

Perubahan berikut akan terdeteksi sebagai pelanggaran kontrak:

  • Field wajib dihapus
  • Nama field berubah
  • Tipe data berubah
  • Enum tidak lagi sesuai
  • Struktur error response berubah

Misalnya, jika kontrak mengharapkan:

{
  "id": 42,
  "name": "Ayu"
}
Enter fullscreen mode Exit fullscreen mode

tetapi provider mengembalikan:

{
  "user_id": "42"
}
Enter fullscreen mode Exit fullscreen mode

validasi skema akan gagal karena nama field, field wajib, dan tipe data tidak sesuai.

3. Konsumen dapat mulai menggunakan mock sejak awal

Setelah endpoint dan skema didefinisikan, mock server dapat menyediakan respons yang sesuai skema. Tim frontend atau layanan downstream tidak perlu menunggu provider selesai diimplementasikan.

Alih-alih menulis mock provider Pact di setiap repository konsumen, arahkan konsumen ke URL mock yang di-host dari spesifikasi yang sama.

Untuk kasus yang membutuhkan data tertentu, gunakan ekspektasi mock kustom. Untuk kasus umum, biarkan mock menghasilkan respons berdasarkan schema.

4. Terapkan kontrak di CI tanpa broker

Jalankan skenario pengujian dalam pipeline provider:

apidog run
Enter fullscreen mode Exit fullscreen mode

Tambahkan perintah tersebut ke pipeline CI provider agar perubahan yang melanggar kontrak menggagalkan build sebelum deployment.

Pola implementasinya:

steps:
  - name: Jalankan pengujian API
    run: apidog run
Enter fullscreen mode Exit fullscreen mode

Hasilnya tetap sama untuk kasus perubahan skema: jangan rilis perubahan yang merusak. Perbedaannya, pemeriksaan dilakukan langsung pada pipeline layanan yang mengubah implementasi, bukan melalui matriks broker.

Perbandingan workflow: Pact vs Apidog

Kontrak

Di Pact, kontrak adalah file JSON yang dibuat dari contoh interaksi satu konsumen.

Di Apidog, kontrak adalah spesifikasi OpenAPI yang mendefinisikan:

  • Endpoint
  • Parameter
  • Request body
  • Response body
  • Field wajib
  • Enum
  • Status code
  • Bentuk error

Pact memiliki keuntungan berupa sinyal penggunaan per konsumen: provider mengetahui field mana yang digunakan oleh konsumen tertentu. Sebaliknya, spesifikasi bersama menyatukan dokumentasi, mock, pengujian, dan klien dalam satu artefak. Baca lebih lanjut di apa itu kontrak API.

Verifikasi provider

Pact memutar ulang interaksi konsumen terhadap provider langsung.

Dengan Apidog, provider diverifikasi melalui skenario pengujian terhadap implementasi nyata sambil memvalidasi respons terhadap skema. Jalankan skenario tersebut di CI untuk setiap perubahan provider.

Pengembangan konsumen

Pact menyediakan mock provider di dalam unit test konsumen.

Apidog menyediakan mock URL yang berasal dari spesifikasi dan dapat dibagikan antar tim. Konsumen dapat mengintegrasikan mock tersebut ke frontend, aplikasi mobile, atau service downstream sebelum endpoint provider selesai dibuat.

Lihat perbandingan lebih lanjut di pengujian kontrak dan server mock.

Pembatasan deployment

Ini adalah keunggulan utama Pact yang tidak direplikasi Apidog.

Pact menyediakan matriks lintas layanan dan can-i-deploy. Apidog menerapkan pembatasan pada level kontrak:

  1. Provider yang melanggar spesifikasi gagal di CI.
  2. Perubahan spesifikasi menjadi perubahan eksplisit yang ditinjau.
  3. Mock dan dokumentasi diperbarui dari sumber yang sama.

Untuk layanan yang dideploy melalui pipeline terkoordinasi, model ini mencakup sebagian besar kebutuhan. Untuk banyak tim yang melakukan deploy secara independen pada waktu yang tidak dapat diprediksi, matriks deployment Pact masih relevan.

Pact dan PactFlow vs Apidog sekilas

Pact + PactFlow Apidog
Artefak kontrak File kontrak yang dihasilkan per konsumen Satu spesifikasi OpenAPI
Siapa yang menulis kode kontrak Setiap tim konsumen, DSL per bahasa Tidak ada; spesifikasi diedit secara visual atau sebagai kode
Verifikasi provider Putar ulang interaksi + provider state Skenario pengujian + validasi skema otomatis
Mock konsumen Mock provider di dalam pengujian Mock cerdas dari spesifikasi
Deteksi perbedaan skema Saat verifikasi Pada setiap request dan eksekusi CI
Pembatasan deployment Matriks broker + can-i-deploy CI yang dibatasi kontrak per layanan
Infrastruktur Broker sendiri atau PactFlow SaaS Tidak ada tambahan; workspace cloud disertakan
Dokumentasi dan desain Di luar cakupan Dokumentasi interaktif dan editor spesifikasi visual
Biaya OSS gratis; PactFlow gratis untuk 2 integrasi, Team $127/bulan Gratis hingga 4 pengguna; berbayar mulai $9 per pengguna/bulan

Perhitungan biaya yang perlu dipertimbangkan

Pustaka Pact bersifat open source dan gratis. Biaya sebenarnya biasanya berasal dari:

  • Hosting broker atau biaya PactFlow
  • Penulisan DSL pengujian
  • Pemeliharaan provider state
  • Debugging verifikasi lintas tim
  • Pelatihan workflow broker dan versioning

Paket gratis Apidog mencakup 4 pengguna, editor spesifikasi, penggunaan mock server tanpa batas, skenario pengujian, validasi skema, dan eksekusi CLI. Paket berbayar mulai dari $9 per pengguna per bulan.

Jadi, pertanyaannya bukan hanya biaya lisensi. Pertanyaannya adalah apakah tim ingin memelihara mekanisme contract capture-and-replay, atau menggunakan workflow spec-first yang juga menyediakan dokumentasi, mock, dan pengujian API.

Jika Anda ingin mengonsolidasikan tooling API, lihat alternatif Postman terbaik. Untuk workflow contract-first, lihat tumpukan alat pengembangan contract-first.

Cara migrasi dari Pact ke workflow berbasis OpenAPI

Anda tidak perlu mengonversi file kontrak Pact satu per satu. Fokusnya adalah mempromosikan spesifikasi menjadi kontrak utama.

1. Buat atau impor spesifikasi OpenAPI

Jika Anda sudah memiliki OpenAPI, impor spesifikasi tersebut ke Apidog. Spesifikasi itu akan menjadi sumber untuk dokumentasi, mock, dan validasi.

Jika belum ada, hasilkan dari anotasi kode atau definisikan secara bertahap. Gunakan file kontrak Pact sebagai daftar endpoint dan respons yang benar-benar digunakan konsumen.

2. Tambahkan skenario pengujian provider

Buat skenario untuk endpoint utama provider, terutama untuk:

  • Response sukses
  • Error validasi
  • Autentikasi dan otorisasi
  • Status 404
  • Kondisi bisnis penting

Pastikan setiap respons divalidasi terhadap skema OpenAPI.

3. Jalankan pengujian melalui CLI di CI

Tambahkan apidog run ke setiap build provider:

apidog run
Enter fullscreen mode Exit fullscreen mode

Dengan langkah ini, perubahan provider yang melanggar spesifikasi dapat dihentikan sebelum deployment.

4. Arahkan konsumen ke smart mock

Ganti setup mock Pact per konsumen dengan URL mock dari spesifikasi. Hapus DSL Pact secara bertahap setelah konsumen berhasil bermigrasi.

5. Jadikan perubahan spesifikasi sebagai perubahan yang ditinjau

Gunakan branch dan pull request untuk perubahan OpenAPI. Perlakukan perubahan berikut sebagai perubahan breaking:

  • Menghapus endpoint
  • Menghapus field wajib
  • Mengubah tipe data
  • Mengubah enum
  • Mengubah format error response

Dengan begitu, perubahan kontrak terlihat dan dapat dibahas sebelum menjadi insiden.

6. Nonaktifkan broker hanya pada integrasi yang sesuai

Pertahankan can-i-deploy untuk integrasi yang benar-benar membutuhkan koordinasi deployment independen. Hentikan penggunaan broker pada integrasi yang hanya membutuhkan validasi skema, mock, dan pemeriksaan CI.

Kapan Pact masih menjadi pilihan yang tepat

Pact tetap masuk akal jika:

  • Banyak tim men-deploy layanan secara independen.
  • Anda membutuhkan jawaban otomatis untuk pertanyaan: “Apakah versi X aman masuk produksi bersama layanan lain yang sedang berjalan?”
  • Deployment lintas layanan tidak dapat dikoordinasikan dalam satu pipeline.
  • Anda membutuhkan pengujian kontrak untuk antrean pesan.
  • Sinyal penggunaan field per konsumen sangat penting bagi provider.

Untuk kebutuhan tersebut, matriks Pact Broker dan can-i-deploy memang dirancang khusus untuk masalahnya.

Namun, jika kebutuhan utama Anda adalah:

  • Menemukan perbedaan skema
  • Menyediakan mock untuk konsumen
  • Memvalidasi respons API
  • Menjalankan pemeriksaan kontrak di CI
  • Menyatukan spesifikasi, dokumentasi, dan pengujian

maka workflow berbasis OpenAPI biasanya lebih sederhana untuk dioperasikan.

Pertanyaan yang sering diajukan

Apakah Apidog adalah alat pengujian kontrak seperti Pact?

Apidog menegakkan kontrak dengan pendekatan berbeda. Pact menghasilkan kontrak per konsumen dari kode pengujian dan memutarnya kembali terhadap provider. Apidog menggunakan spesifikasi OpenAPI sebagai kontrak dan memvalidasi request serta respons terhadapnya pada setiap eksekusi pengujian dan CI.

Lihat pengujian kontrak API untuk detailnya.

Apakah Apidog mendukung can-i-deploy atau Pact Broker?

Tidak. Apidog tidak memiliki matriks verifikasi atau gerbang deployment lintas layanan seperti Pact Broker.

Gerbangnya berada di level kontrak: build provider yang melanggar spesifikasi akan gagal di pipeline provider tersebut. Jika Anda membutuhkan pembatasan tingkat matriks, tetap gunakan Pact untuk integrasi itu atau pertimbangkan pendekatan statis dalam pengujian kontrak dua arah.

Bisakah Apidog menggantikan mock konsumen Pact?

Ya, untuk sebagian besar kasus. Mock server Apidog menghasilkan respons dari spesifikasi OpenAPI dan dapat dikustomisasi melalui ekspektasi untuk kasus tertentu. Konsumen dapat menggunakan URL mock bersama alih-alih menulis DSL mock provider.

Baca pengujian kontrak dan alat mocking untuk konteks lebih luas.

Bagaimana dengan fuzzing provider terhadap spesifikasi?

Anda dapat memasangkan skenario pengujian Apidog dengan penguji properti berbasis spesifikasi untuk cakupan negatif yang lebih luas. Salah satu opsi yang dapat dibandingkan adalah Schemathesis, dibahas dalam apa itu Schemathesis.

Berapa biaya PactFlow dibandingkan dengan Apidog?

PactFlow Starter gratis untuk 2 integrasi. Paket Team terdaftar seharga $127 per bulan, atau sekitar $1.385 yang ditagihkan setiap tahun, untuk 50 integrasi. Enterprise memiliki harga khusus.

Apidog gratis hingga 4 pengguna, sementara paket berbayar mulai dari $9 per pengguna per bulan. Jika Anda juga membandingkan pendekatan capture-and-replay, lihat alternatif Keploy terbaik.

Singkirkan ritualnya, pertahankan kontraknya

Jika Anda menggunakan Pact terutama untuk mendeteksi perbedaan skema, Anda dapat memperoleh perlindungan tersebut dari satu spesifikasi OpenAPI yang divalidasi pada setiap eksekusi.

Mulai dengan langkah berikut:

  1. Impor spesifikasi OpenAPI.
  2. Buat skenario pengujian provider.
  3. Jalankan apidog run di CI.
  4. Berikan URL mock kepada konsumen.
  5. Tinjau setiap perubahan spesifikasi sebagai perubahan kontrak.

Unduh Apidog atau mulai langsung di browser. Untuk tim hingga 4 pengguna, paket gratis sudah mencakup workflow utama tanpa broker tambahan.

Top comments (0)