Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

Praktik Terbaik Versi API RESTful: Mengapa v1 adalah yang terbaik

Email

1 min read

Praktik Terbaik Versi API RESTful: Mengapa v1 adalah yang terbaik

Email

1 min read

Praktik Terbaik Versi API RESTful: Mengapa v1 adalah yang terbaik

Jadi seberapa sulitkah untuk mengelola versi API? Kebenarannya adalah itu bukan hal yang sulit, tetapi yang sulit adalah mempertahankan kewarasan dengan tidak terpecah menjadi sejumlah versi dan subversi yang membingungkan yang diterapkan di puluhan titik akhir API dengan kompatibilitas yang tidak jelas.

Perubahan Buruk! Versi API Baik!

Seperti yang disadari oleh siapa pun yang telah membangun atau menggunakan API secara teratur cepat atau lambat, perubahan mendasar sangat buruk dan bisa menjadi cacat serius pada API yang seharusnya berguna. Perubahan mendasar adalah perubahan pada perilaku API yang dapat merusak integrasi pengguna dan mengakibatkan banyak frustrasi dan hilangnya kepercayaan antara penyedia API dan pengguna. Perubahan mendasar mengharuskan pengguna diberi tahu sebelumnya (dengan penjelasan lengkap) daripada perubahan yang tiba-tiba muncul, seperti fitur baru yang menyenangkan. Cara untuk menghindari frustrasi tersebut adalah dengan membuat versi API dengan jaminan dari pemilik API bahwa tidak akan ada perubahan mengejutkan yang diperkenalkan dalam satu versi pun.

Jadi, seberapa sulitkah membuat versi API? Kenyataannya tidak sulit, tetapi yang sulit adalah menjaga kewarasan dengan tidak perlu menyusut menjadi sejumlah besar versi dan subversi yang diterapkan di puluhan titik akhir API dengan kompatibilitas yang tidak jelas.

Kami memperkenalkan v1 dari API tiga tahun yang lalu dan tidak menyadari bahwa itu akan tetap kuat hingga hari ini. Jadi, bagaimana kami terus memberikan API pengiriman email terbaik selama lebih dari dua tahun tetapi masih mempertahankan versi API yang sama? Meskipun ada banyak pendapat berbeda tentang cara membuat versi REST API, saya berharap bahwa kisah v1 yang rendah hati namun kuat kami dapat membimbing Anda dalam perjalanan menuju pencerahan versi API.

REST Is Best

API SparkPost berasal dari ketika kami adalah Message Systems, sebelum petualangan kami di cloud. Pada saat itu kami sibuk membuat persiapan akhir untuk peluncuran beta Momentum 4. Ini adalah peningkatan besar ke versi 3.x, MTA on-premise kami yang terkemuka di pasar. Momentum 4 mencakup UI yang sepenuhnya baru, analitik waktu nyata, dan yang paling penting, API web baru untuk penyisipan dan pembuatan pesan, pengelolaan template, dan mendapatkan metrik email. Visi kami adalah arsitektur yang mengutamakan API - di mana bahkan UI akan berinteraksi dengan endpoint API.

Salah satu keputusan terbaik yang kami buat sejak awal adalah mengadopsi gaya RESTful. Sejak akhir 2000-an, representational state transfer (REST) berbasis web API adalah standar de-facto API cloud. Menggunakan HTTP dan JSON memudahkan para pengembang, terlepas dari bahasa pemrograman yang mereka gunakan – PHP, Ruby, dan Java – untuk berintegrasi dengan API kami tanpa perlu mengetahui atau mempedulikan teknologi dasar kami.

Memilih untuk menggunakan arsitektur RESTful adalah mudah. Memilih konvensi versioning tidak semudah itu. Awalnya kami menghindari pertanyaan tentang versi dengan tidak menyediakan versi pada beta sama sekali. Namun, dalam beberapa bulan beta sudah di tangan beberapa pelanggan dan kami mulai membangun layanan cloud kami. Saatnya memberikan versi. Kami mengevaluasi dua konvensi versioning. Yang pertama adalah memasang versi langsung di URI dan yang kedua adalah menggunakan header Accept. Pilihan pertama lebih eksplisit dan tidak terlalu rumit, yang memudahkan pengembang. Karena kami menyayangi pengembang, itu adalah pilihan logis.

API SparkPost berasal dari ketika kami adalah Message Systems, sebelum petualangan kami di cloud. Pada saat itu kami sibuk membuat persiapan akhir untuk peluncuran beta Momentum 4. Ini adalah peningkatan besar ke versi 3.x, MTA on-premise kami yang terkemuka di pasar. Momentum 4 mencakup UI yang sepenuhnya baru, analitik waktu nyata, dan yang paling penting, API web baru untuk penyisipan dan pembuatan pesan, pengelolaan template, dan mendapatkan metrik email. Visi kami adalah arsitektur yang mengutamakan API - di mana bahkan UI akan berinteraksi dengan endpoint API.

Salah satu keputusan terbaik yang kami buat sejak awal adalah mengadopsi gaya RESTful. Sejak akhir 2000-an, representational state transfer (REST) berbasis web API adalah standar de-facto API cloud. Menggunakan HTTP dan JSON memudahkan para pengembang, terlepas dari bahasa pemrograman yang mereka gunakan – PHP, Ruby, dan Java – untuk berintegrasi dengan API kami tanpa perlu mengetahui atau mempedulikan teknologi dasar kami.

Memilih untuk menggunakan arsitektur RESTful adalah mudah. Memilih konvensi versioning tidak semudah itu. Awalnya kami menghindari pertanyaan tentang versi dengan tidak menyediakan versi pada beta sama sekali. Namun, dalam beberapa bulan beta sudah di tangan beberapa pelanggan dan kami mulai membangun layanan cloud kami. Saatnya memberikan versi. Kami mengevaluasi dua konvensi versioning. Yang pertama adalah memasang versi langsung di URI dan yang kedua adalah menggunakan header Accept. Pilihan pertama lebih eksplisit dan tidak terlalu rumit, yang memudahkan pengembang. Karena kami menyayangi pengembang, itu adalah pilihan logis.

API SparkPost berasal dari ketika kami adalah Message Systems, sebelum petualangan kami di cloud. Pada saat itu kami sibuk membuat persiapan akhir untuk peluncuran beta Momentum 4. Ini adalah peningkatan besar ke versi 3.x, MTA on-premise kami yang terkemuka di pasar. Momentum 4 mencakup UI yang sepenuhnya baru, analitik waktu nyata, dan yang paling penting, API web baru untuk penyisipan dan pembuatan pesan, pengelolaan template, dan mendapatkan metrik email. Visi kami adalah arsitektur yang mengutamakan API - di mana bahkan UI akan berinteraksi dengan endpoint API.

Salah satu keputusan terbaik yang kami buat sejak awal adalah mengadopsi gaya RESTful. Sejak akhir 2000-an, representational state transfer (REST) berbasis web API adalah standar de-facto API cloud. Menggunakan HTTP dan JSON memudahkan para pengembang, terlepas dari bahasa pemrograman yang mereka gunakan – PHP, Ruby, dan Java – untuk berintegrasi dengan API kami tanpa perlu mengetahui atau mempedulikan teknologi dasar kami.

Memilih untuk menggunakan arsitektur RESTful adalah mudah. Memilih konvensi versioning tidak semudah itu. Awalnya kami menghindari pertanyaan tentang versi dengan tidak menyediakan versi pada beta sama sekali. Namun, dalam beberapa bulan beta sudah di tangan beberapa pelanggan dan kami mulai membangun layanan cloud kami. Saatnya memberikan versi. Kami mengevaluasi dua konvensi versioning. Yang pertama adalah memasang versi langsung di URI dan yang kedua adalah menggunakan header Accept. Pilihan pertama lebih eksplisit dan tidak terlalu rumit, yang memudahkan pengembang. Karena kami menyayangi pengembang, itu adalah pilihan logis.

API Governance

Dengan konvensi versi yang dipilih, kami memiliki lebih banyak pertanyaan. Kapan kita akan menaikkan versinya? Apa itu perubahan yang memecahkan?  Apakah kita akan mereversi seluruh API atau hanya titik akhir tertentu? Di SparkPost, kami memiliki beberapa tim yang bekerja di bagian yang berbeda dari API kami. Di dalam tim-tim tersebut, orang bekerja pada titik akhir yang berbeda pada waktu yang berbeda pula. Oleh karena itu, sangat penting bahwa API kami konsisten dalam penggunaan konvensi. Ini lebih besar dari sekadar versi.

Kami membentuk kelompok tata kelola yang mencakup insinyur yang mewakili setiap tim, anggota dari tim Manajemen Produk, dan CTO kami. Kelompok ini bertanggung jawab untuk membuat, mendokumentasikan, dan menegakkan konvensi API kami di semua tim. Saluran Slack tata kelola API juga berguna untuk debat yang hidup tentang topik ini.

Kelompok tata kelola mengidentifikasi sejumlah cara perubahan dapat diperkenalkan ke API yang bermanfaat bagi pengguna dan tidak termasuk perubahan yang memecahkan. Ini termasuk:

  • Sumber daya baru atau titik akhir API

  • Parameter opsional baru

  • Perubahan ke titik akhir API yang tidak publik

  • Kunci opsional baru dalam tubuh JSON POST

  • Kunci baru yang dikembalikan dalam tubuh respons JSON


Sebaliknya, perubahan yang memecahkan termasuk apa pun yang dapat mengganggu integrasi pengguna seperti:

  • Parameter wajib baru

  • Kunci wajib baru dalam tubuh POST

  • Pencabutan titik akhir yang ada

  • Pencabutan metode permintaan titik akhir yang ada

  • Perilaku internal yang secara materi berbeda dari panggilan API – seperti perubahan pada perilaku default.

The Big 1.0

Seperti yang telah kami dokumentasikan dan diskusikan, kami juga sampai pada kesimpulan bahwa demi kepentingan terbaik semua orang (termasuk kami!), sebaiknya menghindari membuat perubahan yang menghancurkan pada API karena mengelola banyak versi menambah beban kerja yang cukup banyak. Kami memutuskan bahwa ada beberapa hal yang perlu kami perbaiki dengan API kami sebelum berkomitmen ke "v1".

Mengirim email sederhana memerlukan terlalu banyak usaha. Untuk "menjaga agar hal-hal sederhana tetap sederhana" kami memperbarui badan POST untuk memastikan bahwa baik penggunaan kasus sederhana maupun kompleks dapat terakomodasi. Format baru tersebut juga lebih tahan masa depan. Selain itu, kami menyelesaikan masalah dengan endpoint Metrics. Endpoint ini menggunakan parameter "group_by" yang akan mengubah format badan respons GET sedemikian rupa sehingga kunci pertama adalah nilai dari parameter group by. Itu tampak tidak terlalu RESTful jadi kami memecah setiap group by menjadi endpoint terpisah. Akhirnya kami memeriksa setiap endpoint dan membuat sedikit perubahan di sana-sini untuk memastikan mereka sesuai dengan standar.

Dokumentasi Akurat

Adalah penting untuk memiliki dokumentasi API yang akurat dan dapat digunakan untuk menghindari perubahan yang merusak, baik yang disengaja maupun tidak sengaja. Kami memutuskan untuk menggunakan pendekatan dokumentasi API sederhana dengan memanfaatkan bahasa Markdown yang disebut API Blueprint dan mengelola dokumen kami di Github. Komunitas kami berkontribusi dan meningkatkan dokumen sumber terbuka ini.  Kami juga menjaga sekumpulan dokumen nonpublik di Github untuk API dan titik akhir internal.

Pada awalnya, kami menerbitkan dokumen kami ke Apiary, alat yang hebat untuk membuat prototipe dan menerbitkan dokumen API. Namun, memasukkan Apiary ke dalam situs web kami tidak berfungsi pada perangkat seluler jadi sekarang kami menggunakan Jekyll untuk menghasilkan dokumen statis sebagai gantinya.  Dokumen SparkPost API terbaru kami sekarang memuat dengan cepat dan berfungsi baik pada perangkat seluler yang penting bagi pengembang yang tidak selalu duduk di depan komputer mereka.

Memisahkan Deployment dari Release

Kami belajar sejak awal trik berharga untuk memisahkan penerapan dari rilis. Dengan cara ini, kami dapat sering menerapkan perubahan ketika sudah siap melalui pengiriman dan penerapan terus menerus, tetapi kami tidak selalu mengumumkan atau mendokumentasikan mereka secara publik pada saat yang sama. Tidak jarang bagi kami untuk menerapkan endpoint API baru atau peningkatan pada endpoint API yang ada dan menggunakannya dari dalam UI atau dengan alat internal sebelum kami mendokumentasikannya dan mendukungnya secara publik. Dengan begitu, kami dapat melakukan beberapa penyesuaian untuk kegunaan atau kesesuaian dengan standar tanpa khawatir membuat perubahan yang merusak. Setelah kami puas dengan perubahannya, kami menambahkannya ke dokumentasi publik kami.

Aduh!

Adalah adil untuk mengakui bahwa ada kalanya kami tidak memenuhi idealisme "tiada perubahan besar" kami dan ini layak dipelajari. Pada suatu kesempatan, kami memutuskan akan lebih baik bagi pengguna jika properti tertentu secara default diatur ke benar daripada salah. Setelah kami menerapkan perubahan tersebut, kami menerima beberapa keluhan dari pengguna karena perilaku telah berubah secara tak terduga. Kami membalik perubahan tersebut dan menambahkan pengaturan pada tingkat akun – pendekatan yang tentu saja lebih ramah pengguna.

Sesekali kami tergoda untuk memperkenalkan perubahan besar sebagai hasil dari perbaikan bug. Namun, kami memutuskan untuk membiarkan keanehan ini daripada berisiko merusak integrasi pelanggan demi konsistensi.

Ada kasus langka di mana kami membuat keputusan serius untuk membuat perubahan yang signifikan – seperti menghentikan sumber daya atau metode API – demi kepentingan komunitas pengguna yang lebih besar dan hanya setelah memastikan bahwa ada sedikit atau tidak ada dampak pada pengguna. Sebagai contoh, kami dengan sengaja membuat pilihan untuk mengubah perilaku respons dari Suppression API tetapi hanya setelah mempertimbangkan manfaat dan dampaknya bagi komunitas dan dengan hati-hati mengkomunikasikan perubahan tersebut kepada pengguna kami. Namun, kami tidak akan pernah memperkenalkan perubahan yang memiliki kemungkinan kecil berdampak langsung pada pengiriman email produksi pengguna.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

R

Reach

G

Grow

M

Manage

A

Automate

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.