ReST API'leri için sürüm oluşturma stratejilerini okudum ve hiçbirinin ele almadığı bir şey, temeldeki kod tabanını nasıl yönettiğinizdir.
Diyelim ki bir API'de bir dizi son derece değişiklik yapıyoruz - örneğin, Müşteri kaynağımızı tek bir alan yerine ayrı forename
ve surname
alanları döndürecek şekilde değiştiriyoruz name
. (Bu örnek için, ilgili kavramları anlamak kolay olduğu için URL sürüm oluşturma çözümünü kullanacağım, ancak soru içerik pazarlığı veya özel HTTP üstbilgileri için de aynı derecede geçerlidir)
Şimdi bir uç noktamız var http://api.mycompany.com/v1/customers/{id}
ve uyumsuz başka bir uç noktamız var http://api.mycompany.com/v2/customers/{id}
. Hala v1 API için hata düzeltmeleri ve güvenlik güncellemeleri yayınlıyoruz, ancak yeni özellik geliştirmenin tamamı artık v2'ye odaklanıyor. API sunucumuzdaki değişiklikleri nasıl yazar, test eder ve dağıtırız? En az iki çözüm görebiliyorum:
V1 kod tabanı için bir kaynak kontrol dalı / etiketi kullanın. v1 ve v2, önceki sürümü desteklerken büyük bir yeni sürüm geliştirirken yerel uygulamalar için kod tabanlarını yönetme şekline benzer şekilde, her iki sürüme de aynı hata düzeltmesini uygulamak için gerektiği şekilde kullanılan revizyon denetimi birleştirmeleriyle bağımsız olarak geliştirilir ve dağıtılır.
Kod tabanının API sürümlerinden haberdar olmasını sağlayın, böylece hem v1 müşteri temsilini hem de v2 müşteri temsilini içeren tek bir kod tabanı elde edersiniz. Sürüm oluşturmayı bir dağıtım sorunu yerine çözüm mimarinizin bir parçası olarak ele alın - muhtemelen isteklerin doğru sürüm tarafından işlendiğinden emin olmak için bazı ad alanları ve yönlendirme kombinasyonlarını kullanın.
Şube modelinin bariz avantajı, eski API sürümlerini silmenin önemsiz olmasıdır - sadece uygun dalı / etiketi dağıtmayı bırakın - ancak birkaç sürüm çalıştırıyorsanız, gerçekten kıvrımlı bir dal yapısı ve dağıtım hattına sahip olabilirsiniz. "Birleşik kod tabanı" modeli bu sorunu ortadan kaldırır, ancak (sanırım?) Artık gerekli olmadıklarında kullanımdan kaldırılmış kaynakları ve uç noktaları kod tabanından kaldırmayı çok daha zor hale getirecektir. Bunun muhtemelen öznel olduğunu biliyorum, çünkü basit bir doğru cevap olma ihtimali düşük, ancak birden çok sürümde karmaşık API'leri kullanan kuruluşların bu sorunu nasıl çözdüğünü anlamayı merak ediyorum.