Bir API çalıştırmak, içerik türü bir başlığı düzeltirsem müşteriler için bir şeyleri kırar mı?


14

Kullanmakta olan birkaç kişiyle bir API çalıştırıyoruz. Benim açımdan bazı eski sakarlıklardan dolayı, uç noktalardan biri , ne zaman olması gerektiğinde yanlış içerik türü üstbilgisini döndürüyor . Benim sorum, doğru değeri döndürmek için değiştirerek bunu düzeltirsek, mevcut müşterilerimiz için işleri ne kadar berbat edebilir? Ya da başka bir deyişle, birçok farklı HTTP istemci kütüphanesinin böyle bir değişiklik görürken ölümcül hatalar atmasını bekler misiniz?jsjson

Bunun, çok fazla terlemeden devam edebileceğimiz ve yapabileceğimiz bir değişiklik olup olmadığına karar vermeye çalışıyoruz veya tüm kullanıcılara dikkatlice e-posta göndermeli ve çok yıllı bir kullanım dışı kalma süresi ... veya aradaki bir şeyi duyurmalıyız.

Muhtemelen ne tür farklı HTTP istemcilerinin kullanıldığına bağlıdır, bu yüzden kullanıcı aracılarına bir göz attım. Cevap: birçok farklı soru! İşte en iyilerinden bazıları:

"okhttp / 3.2.0", "python istekleri / 2.10.0", "Ruby", "python istekleri / 2.7.0", "Mozilla / 5.0", "Java / 1.8.0_91", "python istekleri /2.4.3 "," okhttp / 3.3.0 "," Lucee "," Dalvik / 2.1.0 "," Google-HTTP-Java-İstemci / 1.21.0 "," PHP_appname "," NativeHost "," Java /1.7.0_67 "," Apache-HttpClient / UNAVAILABLE "," Dalvik / 1.6.0 "," Web sniffer / 1.1.0 "," unirest-objc / 1.1 "

Çeşitli farklı mobil ve sunucu tarafı dil kütüphaneleri. Çoğunlukla javascript çalıştıran tarayıcılar değil, bazıları da.

Çoğu kişi içerik türünün yanlış olduğunu fark etmiyor gibi görünüyor, ancak arada bir yeni destek talebi bu sorundan şikayetçi oluyor, bu yüzden düzeltmek istiyoruz.


4
Yanlış bir içerik türü üstbilgisiyle doğru çalışan istemcilerin, doğru olanı ayarladıktan sonra çalışmayı bırakmayacağını, ancak varsayımlar hakkında ne söylediklerini bildiğinizi varsayabilirim. Öyleyse test edin, değişikliklerinizi kullanıcı tabanınıza önceden iletin ve / veya belirli bir istemci kırılırsa, söz konusu istemciyi algılayabilir ve yanlış içerik türü üstbilgisini döndürmeye devam edebileceğiniz (veya tersini, geri dönüşü yapabilirsiniz) destek biletleri üreten ve mevcut kullanıcılar / kullanıcı aracıları için her şeyi aynı tutan istemciler için doğru olanı).
HBruijn

5
zorunlu xkcd: xkcd.com/1172
njzk2

API'nızı sürümlendirmiyor musunuz?
Michael Hampton

Tüm API için yalnızca birkaç yıl içinde oldukça büyük yeniden yapılandırmalar yaptığımızda çarpmak isteyeceğimiz büyük bir sürüm numarasına sahibiz. Bu noktada elbette bu sorunu çözerdik, ama ... bunu asla yapamayacağımızı düşünüyoruz. Bu biri olan versiyon numaraları.
Harry Wood

Yanıtlar:


30

mevcut müşterilerimiz için işleri ne kadar berbat edebilir?

Bu İçerik Türünün yanlış olmasına dayanan bir kod yazmışlarsa savaş gemilerini tamamen batırabilirler .

Kitaplıkların hata atmasını beklemem, ancak bazı durumlarda katı kitaplıkların davranışlarının yanlış MIME türünü işlemek için geçersiz kılınmasını bekliyorum.

API'nizin bir yerde bir istek alanında sürüm / düzeltme değeri varsa, onu yükseltin ve yeni sürümde doğru türü döndürün, ancak eski sürümlerde yanlış türü döndürmeye devam edin. Böyle bir istek alanınız yoksa, şimdi bir tane eklemek için iyi bir zaman.


6
+1 zaten iyi bir abartma için
HBruijn

4
Genellikle başka seçeneğiniz yoktur. "Güncelleme veya izin" ültimatomu verilen müşteriler ikincisine karar verebilir, prensipte iyi, uygulamada kötüdür. Eski sürüm zamanla kullanımdan kaldırılabilir.
alzee

3
Daha fazla bilgi için en.wikipedia.org/wiki/Software_versioning adresini ziyaret etmek isteyebilirsiniz, ancak istekleri + 1'leyin .
SBoss

7
@WinstonEwert: Tabii ki faydalı. İnsanlar hangi API sürümünü kullanmak istediklerini belirtirler, daha sonra programları API'nizi güncelleme ile programlarını güncelleme arasında kendiliğinden yanmaz. Bunu yapmazsanız , arayüzünüzü değiştirdiğinizde müşterilerinizin kodunun tüm güncel ve geçmiş sürümlerini otomatik olarak kesersiniz . Ve bu bir hizmeti yürütmenin korkunç bir yoludur.
Monica ile Hafiflik Yarışları

1
Bu çok iyi bir noktaya benziyor: "Bazı durumlarda katı kütüphanelerin yanlış mim türü ile başa çıkmak için davranışlarını geçersiz kıldığını umuyorum " Benim önsezim (tüm sorunun cevabı olarak) kütüphaneler bu konuda iyi olacak, ama bu bir endişe kaynağı. Bazı müşteriler proaktif bir şekilde bunun üzerinde çalışmış olabilir ve takas daha sonra onlar için kırılacaktır. Bunun ne kadar olduğunu merak ediyorum.
Harry Wood

11

Birçok değişik HTTP istemci kütüphanesinin böyle bir değişiklik görürken ölümcül hatalar atmasını bekler misiniz?

Hayır. Programcı özellikle bu üstbilgiyi okumadığı ve onunla bir şeyler yapmadığı sürece, tanıdığım her HTTP istemci kitaplığı içerik türü üstbilgisini yok sayar. Içerik türü: application / json otomatik olarak bir json ayrıştırıcı dahil neden bir kütüphane hayal edebiliyorum ama bunun gerçekte nerede olduğu herhangi bir durumda bilmiyorum.

Çoğu kişi içerik türünün yanlış olduğunu fark etmiyor gibi görünüyor, ancak arada bir yeni destek talebi bu sorundan şikayetçi oluyor, bu yüzden düzeltmek istiyoruz.

Yanlış başlığı nasıl fark ettiler? Buna bakmaya değer olabilir, çünkü yanlış başlık aslında sorunlara neden oluyorsa, açıkça görmezden gelmiyorlardı ve düzeltildiyse sorun yaşayabilirler.



JQuery kullanıyorsanız $.ajaxve dataType:seçeneği belirtmezseniz , yanıt türünü Content-typebaşlıktan alır. Eğer öyleyse application/json, arayana aktarmadan önce otomatik olarak ayrıştırır.
Barmar

6

Tüm müşterilerinizden çıkış yapmadan söylemek çok zor. API'nizi v.Next'e yükseltmek için aşağıdaki iki yaklaşımdan birini kullanmanızı öneririm.

  1. Mevcut API'yı genişletin. API'nıza v.Next kullanmak için bir sorgu dizesi veya başka bir değişken ekleyin. Bu değişkeni kullanan tüm istekler için güncellenen içerik türünü kullanın.
  2. Mevcut API'nize paralel olarak API'nizin bir Hazırlama veya Üretim Öncesi örneğini çalıştırın. Üretimle neredeyse aynı olmalıdır. Aynı arka ucu kullanarak bile. Her ne kadar bu v.Next için önerilen değişikliklere sahip olacak.

Her iki senaryoda da, yapmak istediğiniz değişiklikleri ve hedef hedef tarih / saatini müşterilerinize iletin. Hizmet kesintisi olmadığından emin olmak için onları hedef tarihten önce test etmeye teşvik edin.

V.Next'te yapılan değişiklikleri ayrıntılı olarak belirten özel bir sayfanız olduğundan emin olun. Bu, müşterilerinize gönderilen iletişimlere dahil edilmelidir. Mevcut istemcilerle ilgili herhangi bir düzeltmeyi ele aldıysanız, bu sayfaya bu düzeltmeleri ekleyin.

Son olarak, müşterilerinizle aşırı iletişim kurmak ve onları spam etmek arasındaki çizgiyi takip edin. Daha acil / acil öncelikler ortaya çıktıkça bu bildirimler kolayca gözden kaçabilir.

FWIW, eğer işler şu anda çalışıyorsa, bu konuda fazla endişelenmezdim. Örneğin, bunun önemli bir güvenlik açığına neden olduğunu fark ederseniz, bu değişikliği atmak için harika bir neden olacaktır. Aksi takdirde bu değişikliği dahil etmek için daha acil bir şey beklerdim.


Teşekkürler. Duymak istediğim cevap değil, ama belki haklısın. Değişimi çok dikkatli bir şekilde tanıtmamız gerekiyor. Yine de "söylemek çok zor" mu? Bazı kişilerin bu tür içerik türü başlık değişikliğinin olası etkileri konusunda deneyim sahibi olacağını umuyordum (dikkatli bir şekilde sürüm oluşturma hakkında daha genel noktaları bir kenara bırakarak)
Harry Wood

5

Bunun kırılacağı bir kitaplık örneği (iyi, tek komut):

cmdletInvoke-RestMethod JSON ile farklı davranır. İsteğin sonucu JSON, XML veya ATOM / RSS ise (ve başlığa dayandığını düşünüyorum), ayrıştırır / serisini kaldırır ve yerel nesneleri döndürür, aksi takdirde ham verileri döndürür.

Bu nedenle, mevcut kod bir dizeyle başa çıkmak için yazılır (belki de geçerek ConvertFrom-Json) ve aniden başarısız olmaya başlar.


blogs.technet.microsoft.com/heyscriptingguy/2013/10/21/… , bunun başlığa baktığı teorisini doğrular.
Winston Ewert

-2

İki sonuç fark ettim:

  1. Bazı istemci kitaplıkları yanıtı düzgün işlemez. Örneğin, yanıt json veya bir dizi yerine bir dize döndürür.
  2. Sıkıştırma her zaman uygulanmaz.

Şüphesiz verileri gönderen, onu alan değil, sıkıştırma uygulayan kişidir?
TRiG
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.