Image for post
Image for post

Veritabanı sistemlerinde, işlemlerin (transaction) güvenli olarak gerçekleştirilebilmesine odaklanan standart bir özellik kümesinin kısaltmasıdır.

Bir veritabanı sisteminin tam olarak güvenli veri işleme özelliğine sahip olduğunu söyleyebilmemiz için bu özellik kümesine sahip olması beklenmektedir.

ACID; Atomicity (Bütünlük), Consistency (Tutarlılık), Isolation (Yalıtım), D urability (Dayanıklılık) akronimi ile ortaya çıkmıştır. ACID’i oluşturan birbirinden önemli bu özellikleri tek tek ele alalım.

Atomicity (Bütünlük)

Bir işlemin bütünlüğünü garanti eder ve ilgili transaction içeriğindeki sorgulardan birisinin çalışması bile başarısız sonuçlanırsa tüm transaction başarısız sayılmalıdır. Yani bir transaction başarılı sayılabilmesi için içeriğindeki tüm sorguların başarılı olarak çalışmış olması gerekmektedir.

Örneğin; bir işlem (transaction) içerisinde products, brands ve stocks tablolarında veri oluşturalım (insert action). Veritabanı sistemimiz bu transactionu işlerken stocks tablosuna bir nedenle veri ekleyemez ise öncesinde products ve brands tablosuna başarıyla eklenen verilerde kaldırılır ve tüm işlem başarısız sayılır. …


Image for post
Image for post

Arayüz Ayrımı Prensibinin odak noktası; eğer bir sınıf implement ettiği interface’e ait tüm nesneleri kullanmıyor ya da o interface ilgili sınıf için eksik kalıyor ise tüm ihtiyaçların doğru şekilde belirlendiği yeni bir interface oluşturulmalı ve artık bu yeni interface kullanılmalıdır.

Bu sayede interface kullanımında ortaya çıkan olası karmaşıklıkların önüne geçebiliriz.

Kısaca bu prensibi uygulamadığımızda ortaya çıkabilecek basit bir problemi örneklendirelim;

Elimizde ICar adında bir interface olsun ve ICar içerisinde turnLight, openDoor, closeDoor metodları bulunsun. A sınıfı ICar’ı implement eden bir sınıf ve inherit ettiği tüm metodları destekliyor. Fakat B sınıfında closeDoor işlevi bulunmuyor fakat implement etmek zorunda olduğu için gövdesini tanımlıyor ve içerisinde NotImplementedException gibi bir Exception fırlatıyor. …


Image for post
Image for post

API servislerinde kullanılmak üzere Facebook tarafından açık kaynak olarak geliştirilmiş, veri sorgulama, değiştirme, abonelik vs. işlevlerini destekleyen, söz dizimi bakımından JSON’a benzeyen fakat özel bir söz dizimine (syntax) sahip sorgulama dili ve yanı sıra bir mimaridir.

Son zamanlarda hayatı biraz yoğun tempoda yaşadığımdan bu yazıyı hazırlamaya/tamamlamaya yeni fırsat bulabildim. GitHub reposunu takip edenler için; 1 ay önce yayınlanmış örnek proje var ama konunun açıklaması arkasından gelmiş oldu 🙂 Evet şimdi gelelim konumuza… Konuya girişi “RestAPI yerine, RestAPI gibi ama daha tatlısı” gibi bir giriş yapabilirdim fakat ben bu hakkımı yazının sonuna doğru pekiştirmek için kullanacağım.

Öncelikle GraphAPI altyapısındaki terimleri kısaca bir tanıyalım. …


Image for post
Image for post

Bilindiği üzere SQL Server’da varsayılan olarak sa (system administrator) kullanıcısı bulunur fakat bu kullanıcıyı uygulamalarda kullanmamalıyız. Ya da uygulamanın erişebileceği tabloları, yapabileceği eylemleri kısıtlamak isteyebiliriz. İşte tam bu noktada bize yeni kullanıcılar gerekir…

Giriş Hesabı Oluşturma

Öncelikle master DB’yi seçip aşağıdaki komut ile giriş hesabı oluşturmalıyız.

CREATE LOGIN "<LOGIN_NAME>" WITH PASSWORD = '<PASSWORD>';

Örneğin;

CREATE LOGIN "api-app" WITH PASSWORD = 'FYRqk9dxRkxCCHeKU6';

Yukarıdaki örnek ile api-app adında ve FYRqk9dxRkxCCHeKU6 şifresine sahip bir giriş hesabı oluşturduk.

Kullanıcı Oluşturma

Şimdi bir kullanıcı oluşturup giriş hesabımız ile bağlamalıyız.

CREATE USER <USER_NAME> FROM LOGIN [<LOGIN_NAME>];

Örneğin;

CREATE USER "api-app" FROM LOGIN [api-app];

Yukarıdaki örnek ile api-app adında bir kullanıcı oluşturduk ve yine aynı isme sahip api-app giriş hesabına bağladık. …


Image for post
Image for post

Eğer uygulamanız Azure üzerinde koşuyor ise ve IP bazlı olacak şekilde bir istemciden gelen trafiği engellemek ya da yalnızca belirlediğiniz istemcilere izin vermek istiyorsanız bu makale size yardımcı olacak 🙂

Şimdi gelin bunları nasıl yaptığımızı görelim…

Portalda giriş yaptıktan sonra ilgili App Service’i bulun ve sonra sol menüden Networking’e tıklayın. Ardından sağ kısımda en allta bulunan Access Restrictions altındaki Configure Access Restrictions bağlantısına tıklayın.

Image for post
Image for post


Image for post
Image for post

Netscape tarafından geliştirilen SSL, Secure Sockets Layer kısaltmasını yani Güvenli Giriş Katmanı’nı ifade eder. Günümüzde SSL yerini IETF tarafından SSL’i temel alan TLS, Transport Layer Security yani Taşıma Katmanı Güvenliği’ne bırakmıştır.

Bu nedenle bu makalede SSL 3.0 üzerine inşa edilerek ortaya çıkan TLS üzerinden verilerin güvenliğinin nasıl sağlandığı konusuna değineceğim.

TLS Asimetrik Şifreleme kullanır, bu nedenle public(açık) ve private(gizli) olmak üzere iki anahtara ihtiyaç duyar. Bu anahtarlar kullanılarak veriler şifrelenir ve çözülür. Şifrelemeden bahsettiğimize göre demek ki TLS’de veriler şifreleniyor…

TLS, Veri Gizliliği, Veri Bütünlüğü ve Kimlik Doğrulama yeteneklerine sahiptir. Veri şifrelendiğinde gizliliği sağlanır ve şifrelerken kullanılan anahtar kaynağın kimliği hakkında bilgiler içerdiğinden doğrulanabilir. …


Image for post
Image for post

Endişelerin Ayrılması (Separation of Concerns) tasarım ilkesi düşük bağlılığa ve benzer sorumluluklara (cohesion) sahip bileşenler ile kümeler/kapsüller oluşturmamıza, sorumluluk sınırlarının net bir şekilde belirlenerek ayrılmasına odaklanır.

SoC ile sürdürülebilir, geliştirilebilir ve tekrar kullanılabilir bilşenlerimiz ve bu bileşenler sayesinde projeler olur.

SoC ile temelde soyutlama (abstraction) yapılır. Soyutlama yaparken dikkat etmemiz gereken nokta ise birbirleri ile benzer bileşenleri gruplayarak (bunlar; dosyalar, sınıflar, fonksiyonlar ve kod blokları olabilir) bu kümeleri yakın şekilde konumlandırmaktır.

Bu sayede hem yönetimi daha kolay olacak hemde çok daha düzenli bir mimarimiz olacaktır. Geliştirme yaparken olası bir sorun oluşması halinde ya da mevcut projede bir sorun oluşması durumunda sorumlu tek bir nokta olacağından problemlerin çözümü ve problemden etkilenen noktalar olabildiğince kısıtlı olacaktır. …


Image for post
Image for post

Bir uygulamanın çalışma süreci boyunca sistemler ya da geliştiriciler tarafından üretilen çıktılara (örn: bilgi/uyarı/hata kayıtlarına) log (kütük) kayıtları denir.

Bu kayıtlar sistem yöneticilerinin sistem ya da kullanıcı aktiviteleri ile ilgili detaylı kayıtlara sahip olmasını ve olası bir problem durumunda kayıtların kullanılarak sorunun çok daha kısa sürede çözümüne/sorumlusunun tespitine fayda sağlamaktadır.

Log kayıtları bize uygulamamız hakkında sağlık/performans bilgilerinin yanı sıra kullanıcı eylemleri ile ilgilide bilgi verebilir. Log kayıtları sadece şu amaçla kullanılır gibi bir durum söz konusu değildir. İstediğiniz her şey için log kaydı oluşturabilir ve bu kayıtları daha sonra yorumlayarak/görselleştirerek anlaşılabilir veriler haline getirebilirsiniz. Hatta log kayıtlarına bağlı alarmlar (kesinlikle!) …


Image for post
Image for post

Sitelerin ana dizininde bulunan/bulunması gereken robots.txt dosyası adından anlaşılabileceği üzere botlar için hazırlanır ve uzantısından anlaşılacağı üzere metin dosyası formatındadır.

Bu dosya içerisinde arama motoru örümcekleri gibi vs. tüm botların kullanması için komutlar ve referans tanımları yer alır.

Bir bot sitemizi ziyaret etmeden önce ana dizinde olması gereken robots.txt dosyasına bakar. Yani örnek üzerinden ilerlemek gerekirse; benimsitem.com/ ya da benimsitem.com/test-sayfa sayfalarına istekte bulunmadan önce ilgili domain/subdomain için benimsitem.com/robots.txt dosyasını okur.

Her bot robots.txt okuyacak ya da okusa bile dikkate alacak anlamına gelmez.

Fakat arama motorları örümcekleri gibi botlar robots.txt okur ve dikkate alırlar. Hatta buradaki kurallara göre sayfalarınızı tarar, dizine ekleme/eklememe kararlarını verirler. …


Image for post
Image for post

Bu prensibin odak noktası; alt seviyedeki nesnelerin, üst seviyedeki nesneler ile yer değiştirebilir olmasını sağlamaktır. Alt seviye bir sınıf, üst seviyesi olan sınıf ile aynı şekilde davranmalı ve üst sınıfın tüm özelliklerini kullanabilmelidir.

Bu prensibi Open/Closed Principle (Açık Kapalı Prensibi) aklımızın bir köşesinde tutarak anlamaya çalışırsak kavramamız çok daha kolay olacaktır.

Alt seviye sınıfın bağlı oldukları üst seviye sınıf ile aynı şekilde davranabilmesi ne demek?
Vehicle adında bir sınıfımız olsun. Sonra bu sınıfı inherit eden (miras alan) Airplane ve Train sınıflarımız olsun. Vehicle sınıfı içerisinde closeDoors ve doFly metodumuz olursa;

Airplane için doFly metodu uygulanabilir, fakat Train :/ Trenler uçamaz… Bu durumda Train sınıfı içerisinde doFly metodu için NotImplementedException fırlatabiliriz fakat bu iyi bir çözüm olmaz. Eğer bu tabloyu closeDoors için değerlendirecek olursak karşımıza bir sorun çıkmaz çünkü uçak ve tren için kapıları kapatma metodu kullanılabilir. …

About

Halil Şafak KILIÇ

Software Developer, Web Developer — Ankara, Turkey halilsafakkilic.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store