API bozulmalarını önlemeye yardımcı olmak için genellikle REST hizmetleri için bir istemci kitaplığı geliştirilmeli mi?


9

UI kodunun aynı ekip tarafından ancak hizmetler katmanından (REST / Java) farklı bir dilde (Python / Django) geliştirileceği bir projemiz var. Her bir katman için kod farklı kod depoları çıkar ve burada olabilir farklı salım döngüleri takip edin. UI katmanı perspektifinden hizmetler katmanında kırılma değişiklikleri önleyecek / azaltacak bir süreç ile gelmeye çalışıyorum.

Kullanıcı arayüzünü veya hizmetler katmanını oluşturduğumuzda çalıştıracağımız kullanıcı arayüzü düzeyinde entegrasyon testleri yazmayı düşündüm (Jenkins iki Git deposunda bulunan kodu oluşturmak için CI aracımız olarak kullanıyoruz) ve eğer o zaman servis katmanında bir şey kırıldı ve taahhüt kabul edilmedi.

Hizmetler katmanı geliştiricisinin, UI katmanında bulunan REST hizmeti için bir istemci kitaplığı oluşturup sürdürmesi de, her bir değişiklik olduğunda güncelleyecekleri iyi bir fikir olabilir mi (en iyi yöntem mi?) Hizmet API'sı? Muhtemelen, UI kodunun oluşturduğu statik olarak yazılmış bir API avantajına sahip oluruz. İstemci kitaplığı API'sı değişirse, kullanıcı arayüzü kodu derlenmez (bu nedenle, bir değişiklik olduğunu daha erken bileceğiz). Ayrıca, kullanıcı arayüzü ile hizmet (ler) arasındaki entegrasyonun hala çalıştığını doğrulamak için kullanıcı arayüzünü veya hizmetler katmanını oluşturduktan sonra entegrasyon testlerini de yürütürüm.


6
Bir API değişikliği yapıldığında size iletilmiyor mu? Bu gibi durumlarda, API'nizi sürümlemek en iyisidir, böylece kullanıcı arayüzünüzde her zaman çalışan bir sürüm bulunur. Ardından, mümkün olan en kısa sürede son API sürümüne "yükseltin".
Matt S

@MattS: Sana katılıyorum. Ancak iletişim olsun veya olmasın: derleyici kodunuzda değiştirmeniz gereken tüm yerleri size söylediğinde, değiştirilmiş bir API'ya yükseltme yapmak çok daha kolaydır. OP hala bize Python kodunun statik olarak yazılmış bir API nasıl sağlayacağını söylemek için özlüyor.
Doc Brown

Yanıtlar:


1

Genel olarak, API'nin kullanımdan kaldırılmasına yönelik yöntemler için, bir kural seçin ve bunları, özellikle de tam bir yedek API kullanılabilir ve test edilir edilmez, 'kullanımdan kaldırınız'. Eski API'yi yerinde bırakın (esasen), ancak yöntem imzası meta verilerini etiketleyin veya kullanımın açıkça tanımlanabilmesi için bir günlük olayı ekleyin.

Hizmet API'sında oturum açmak bir şeydir, ancak tüketen istemcileri uyarmak başka bir şeydir. REST için sağlam ve standart bir uygulama olduğunu sanmıyorum. FourSquare API istemcileri, çağrılan yöntem başarılı olsa bile kullanımdan kaldırılan yöntemleri bulabilir (HTTP 200 kodu, ancak errorType 'kullanımdan kaldırıldı' olarak ayarlanır). Tüketici müşterilerine, kesintiye neden olmadan API içinde kullanımdan kaldırılmış bir yöntem hakkında bilgi edinme fırsatı sağlamak için makul bir strateji.

https://developer.foursquare.com/overview/responses

API kılavuzunuzda, kullanımdan kaldırılmış API'nın tamamen kaldırılacağı bir tarih veya derleme sürüm numarası önerin. Kullanımdan kaldırılma stratejinizi belirledikçe, API'yı tüketicilere önerilen stratejinin ne olduğu konusunda uyarmak isteyeceksiniz (kullanımdan kaldırılmış yöntemleri nasıl keşfedebilirler, yeni API'ya nasıl geçilecekleri ve kullanımdan kaldırılmış API artık kullanılamayacaksa API temizleme sırasında temizlenmelidir) ve sürecin herkese yapay olduğundan emin olmak için onlardan geri bildirim isteyin.


1

API'nizi sürümlendirmek başka bir olasılıktır. Yeni bir sürüm dağıtıldığında, eski sürümü de etkin bırakın ve istek yoluyla görüşmeye izin verin. En son 2 veya 3 sürümü koruyorsanız, kullanıcı arayüzü kodu kendi hızına göre yükseltebilir.


1

Bir seferde en az üç soru var, bunları tek tek yapalım

  • "REST hizmeti için bir istemci kitaplığına sahip olmak iyi bir fikir mi?"

Büyük olasılıkla evet, rasgele REST çağrıları tüm UI kodunuz aracılığıyla doğrudan dağılmasını istemediğiniz sürece.

  • "hizmetler katmanı geliştiricisinin lib oluşturmasına ve bakımını yapmasına izin vermek iyi bir fikir mi?"

Bu, ekibinizdeki kişilere bağlıdır. API'nın sürdürücüsü, hem hizmet katmanında mevcut olan şeyleri hem de UI katmanının gereksinimlerini bilmelidir. Bu nedenle, hizmetler katmanından bir kişi veya UI katmanından bir kişi veya (boyuta ve diğer görevlere bağlı olarak) her iki ekipten bağımsız olarak bir kişi olabilir.

  • [bir avantaj elde edecek olmamızdan]] "istemci kitaplığı API'sı değişirse, kullanıcı arayüzü kodu derlenmez"

Kullanıcı arayüzünün Python'da yazılacağını söylemediniz mi? Bu statik olarak yazılan bir dil değil, bu yüzden bir API değişikliğinden derhal derleme molası beklemezdim. Sanırım bu noktada yanlış anladım ve burada statik olarak yazılmış bir API'niz var - o zaman sadece API'ya bazı yeni özellikler (yeni isteğe bağlı parametreler gibi) eklerken yapı bozulmadığı sürece burada bazı avantajlar elde edebilirsiniz . Aksi taktirde ekibinize gereksiz bir ek yük getireceksiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.