Conditional Formatting
March 4, 2021Bu yazıda api tasarlarken zaman zaman karşıma çıkan bir problemi açıklamaya çalışacağım. İş uygulaması yazarken kimi özelliklerin serialize edilip edilmeyeceği başka özelliklere bağlı oluyor. Conditional Formatting adresinde bunun newtonsoft serializer için nasıl yapıldığı anlatılmış. Ben ise bunun neden yanlış olduğunu açıklamaya çalışacağım.
Bir arkadaşlık uygulaması yazdığınızı düşünün. Uygulamamızda kullanıcı bir arkadaşını bir ağa dahil edebilir. Kullanıcı arkadaşını yakın arkadaş olarak işaretleyebilir. Biz de kullanıcılara yakın arkadaş diye ön tanımlı bir grup vermiş olalım. idsi de ae057975-a838-45ff-8782-60229dd72eb4 olsun. Yazının geri kalanında bu networkten yakın arkadaş grubu olarak bahsedeceğim. Kullanıcımız bir endpoint üzerinden arkadaşlarını sorgulamak istiyor diyelim.
Server Tarafı Implementasyon 1
Problemi kabaca anladığımıza göre .net uygulaması üzerinde poco olarak nasıl ifade ettiğimize bakalım.
|
|
Bunu implement etmek için bir miktar kod yazdıktan sonra çıktımızı alalım.
|
|
Server Tarafı Implementasyon 2
Api ı bu şekilde dışarıya açtıktan sonra bir gün geliyor ürün geliştirmeden biri gelip diyor ki, Kullanıcı arkadaş listesine istek yaptığında yakın arkadaşlarının online olup olmadığını görebilsin.
|
|
Tekrar çalıştırıp sonucu görelim
|
|
Oldu gibi sanki değil mi ?
Client Side
Şimdi api geliştiren ekipte değilde client geliştiren ekipte olsaydım ne olurdu onu irdeleyelim.
|
|
RPC yaptığımızda gelen sonucu deserialize ettiğimize kabaca aşağıdakini bekliyoruz.
|
|
Kodda MAGICAL VALUE olan kısma ne gelecek ? Kimi serializerlar exception atıyor kimisi ise default değer ne varsa onu kullanıp geçiyor. Newtonsoft serializer sanırım default değeri kullanıyordu. Default değeri kullandığı durumda nur topu gibi bir bugınız oluyor. Kullanıcı yakın arkadaş listesinde olmadığı için online durumunun false gelmesi onun offline olduğunu göstermez.
Çözüm
Ben böyle bir durumla karşılaştığım zaman yeni bir endpoint açmayı daha uygun buluyorum. Bizim problemimiz için /closefriends olabilir. Serialization cambazlığı yapmaktansa ekstra bir endpoint daha iyidir. Fazlasıyla basitleştirilmiş bir örnek üzerinde bile bu yazıyı yazması benim için yorucu oldu. Gerçek bir uygulamada gerçek karmaşık iş kurallarına rağmen takip edecek geliştirici neler çeker bir düşünün.
Altın kuralı hatırlayalım.
A good API is not just easy to use but also hard to misuse
hidden
John von Neumann – The Man from the Future
Before I read The Man from the Future by Ananyo Bhattacharya, I only knew about John von Neumann in two contexts: that computers use the von Neumann architecture, and that he appeared in a story about a mathematical problem I … Continue reading →
via Henrik Warne's blogThe Review Is the Action Item
2024/05/30The Review Is the Action ItemI like to consider running an incident review to be its own action item. Other follow-ups emerging from it are a plus, but the point is to learn from incidents, and the review gives room for that to happen.This is no…
via Ferd.caHOWTO: Change your behavior
In theory, behavior change should be easy. At first glance, it seems like you control your behavior. So, if you desire different behavior, why doesn’t your behavior change as instantly as your desire to change it? In short, lasting change of habitual behavio…
via Matt Might's blog