Neden kendi kodumuzu yazmamız gerekiyor? Bilgisayar neden bu kodları bizim için otomatik olarak üretemiyor? Açıkçası, belirli bir veritabanından otomatik olarak bir sistem oluşturmak için bu ortak noktaları kullanabilmeliyiz - bu, "Ben" in Magic yaratma konusundaki asıl amacıdır.
Yazar | Thomas Hansen
Çevirmen | Crescent Moon, sorumlu editör | Guo Rui
Üretildi | CSDN (ID: CSDNnews)
Aşağıdaki çeviridir:
Bir C # geliştiricisi olarak, güçlü yazımı, derleyicisi, jenerikleri, LINQ vb. Gibi C # 'ı çok sevmeme rağmen, bazen PHP ve Python geliştiricilerini de kıskanıyorum. Python ve PHP doğaları gereği daha dinamiktir ve C # ile neredeyse imkansız olan görevleri de gerçekleştirebilirler. Yaklaşık bir yıl önce, bir arkadaşım bana Django'yu gösterdi ve utanç içinde .NET'te benzer bir özellik olmadığını itiraf ettim. Bu nedenle, kendi çabalarımla mucizeler yaratmaya karar verdim, bu yüzden Magic'i yarattım.
CRUD, HTTP ve SQL
Yazılım geliştiricilerin gözünde, birçok sorun JSON'un istemciden arka uca aktarılmasına bağlanabilir. Bu sorun çok yaygındır, bu nedenle CRUD kısaltmasını özetledik: Oluştur (Oluştur), Oku (Oku), Güncelle (Güncelle) ve Sil (Sil). HTTP isteklerinin türleri post, put, delete ve get şeklindedir. SQL'de ekleme, güncelleme, silme ve seçme vardır. Tüm bu operasyonların aynı konsepte, yani CRUD'ye dayandığı söylenebilir.
Bu nedenle, belirli bir veri tabanından otomatik olarak bir sistem oluşturmak için bu ortak noktaları kullanabilmemiz gerektiği açıktır. Neden kendi kodumuzu yazmamız gerekiyor? Bilgisayar neden bu kodları bizim için otomatik olarak üretemiyor?
Büyü
Oluşturduğum Magic, veritabanı şemasından meta bilgileri okuyabilir ve bu bilgileri HTTP REST uç noktası için iskele kodu oluşturmak ve veritabanındaki her CRUD işlemi için kapsülleme sağlamak için kullanabilir. Amacımız, denetleyici uç noktası ile veritabanı arasında ince bir "Hyperlambda" katmanı oluşturmaktır.Tüm CRUD işlemlerini tek bir tuşa basarak veritabanında oluşturabilir ve yayınlayabilirsiniz.
Hyperlambda dinamik bir programlama dili ve aynı zamanda bir DSL'dir. Derlenmesine gerek yoktur, ancak bu tür işlemleri hızlı bir şekilde halledebilir, çünkü her Hyperlambda anahtar sözcüğü C #'daki bir sınıfın kapsüllemesidir.
Bu nedenle, Hyperlambda "anahtar sözcükleri" oluşturmak ve bu anahtar sözcükleri istemciyi doğrulamak ve yetkilendirmek ve kaydetmek için kullanmak bizim için kolaydır. eklemek Veritabanımıza gidin, kayıtları okuyun, vb. Tüm işlemler sadece birkaç satır kodla gerçekleştirilebilir. Dilbilgisinin anlaşılması çok kolaydır ve bilgisayarın da anlaşılması kolaydır, böylece kullanıcılar anahtar kelimeleri düzenleyerek kod iskelesi oluşturabilirler.
Demo süreci: https://youtu.be/ncH4QRpKvx0
Bu videoda Magic ilk olarak veritabanındaki her tablonun veritabanı şemasını okuyacaktır. Ardından, her CRUD işlemi için bir dosya olmak üzere dört Hyperlambda dosyası oluşturun. Bu Hyperlambda dosyalarının yolu, veritabanı nesnesinin adına bağlıdır. Bu nedenle, veritabanı adının "foo" ve tablo adının "bar" olduğunu varsayarsak, HTTP GET'in yolu "/files/magic/foo/bar.get.hl" olur, Hyperlambda dosyasını içeren diskin fiziksel yolunu işaret edin.
Ardından, dinamik bir yönlendirme denetleyicisi aracılığıyla "/ magic" altındaki "herhangi bir" URL'yi kabul ediyorum. Yol, Hyperlambda dosyamı ayrıştırmaktan ve ilgili HTTP fiilini verilen URL'ye göre yürütmekten sorumludur.
Böylece, artık çalışma zamanında Hyperlambda kodunu otomatik olarak oluşturabiliyorum, bu kodlar mevcut veritabanını kapsayabilir, ancak uygulamanın normal kullanımını kesintiye uğratmaz. Ek olarak, HTTP isteklerini bir yönlendirme mekanizması aracılığıyla sunucudaki dosya ve klasörlere (daha önce oluşturulan dosyalara) dinamik olarak yönlendiriyorum.
Küçük ölçekli basit uygulamalar için, tüm arka uç Web API'si o kadar fazladır ki, bir sonraki adım hemen Angular veya React ön uç oluşturmaya başlayabilirsiniz. Ve karmaşık uygulamalar yukarıda verilmeyen başka işlevler gerektirebilir, ancak en azından arka ucunuzun temel bir prototipi vardır ve daha sonra istediğiniz zaman C # kodu ve .Net denetleyicisi yazabilirsiniz.
Magic, temelde ".Net Core ve C # için Django" ile eşdeğerdir. Uygulamanız CRUD gerektirmese bile, ancak MySQL veya Microsoft'un SQL Sunucusunu kullanıyorsanız, üretim ve geliştirme ortamlarında veritabanlarını yönetmenize yardımcı olacak mükemmel bir veritabanı yönetim sistemi olarak hizmet edebilir. Bu açıdan bakıldığında, ".Net Core için PHPMyAdmin" ile eşdeğerdir.
İşlev tanıtımı
Magic, kimlik doğrulama ve yetkilendirmeyi otomatik olarak halledebilir. Örneğin, her HTTP uç noktasına bir "roller" listesi atanabilir (virgülle ayrılmış) ve uç noktanın kodunu yürütmek için istemcinin kimliği doğrulanmalıdır. Bu uygulama, "kimlik doğrulama" HTTP uç noktası çağrıldığında oluşturulan ve istemciye döndürülen bir JWT belirteci kullanır.
Magic'in kendisi tüm veritabanları ile uyumlu olduğundan, bu alanlarda hala bazı manuel işlemler gereklidir. Ama aslında sadece kopyala / yapıştır işi, gerektiğinde üretimde yapabilirsiniz. Bu arada, bazı insanlar şifre depolamayla ilgilenebilir, burada açıklayacağım: Şifre depolaması BlowFish hash ("yavaş karma") kullanır ve ayrıca bağımsız tuzlama algoritmasını destekler.
Ayrıca, her bir uç noktadaki HTTP isteklerinin günlüğe yazılmasını talep ederek, yapı iskelesi kodu oluşturma sürecini Magic aracılığıyla bildirebilirsiniz. Varsayılan olarak, Magic log4net kullanır, ancak kendi günlük arabiriminizi oluşturabilir ve değiştirebilir ve ardından bağımlılık ekleme yoluyla bunu Magic'e sağlayabilirsiniz. Aslında, Magic'teki her şey IoC ve bağımlılık enjeksiyonuna dayalıdır.
Ayrıca desteklemesini istediğiniz CRUD işlemlerini de beyan edebilirsiniz. Örneğin, bazı veritabanı tabloları "salt okunur" olabilir, bu durumda uç noktayı silmeniz veya güncellemeniz gerekmez. İskele kodu oluşturma sürecinde yalnızca basit bir onay kutusunu değiştirmeniz gerekir.
Sihir süper hızlıdır. Her şeyden önce, her bir Hyperlambda dosyasının boyutu çok küçüktür - sadece yaklaşık 10-20 satır kod. Bu nedenle, belirli veritabanları için SQL komutlarını yürütme ve işleme gibi pahalı süreçlerle karşılaştırıldığında, Hyperlambda dosyalarını ayrıştırmanın ve değerlendirmenin neredeyse hiçbir maliyeti yoktur.
Bu nedenle, bu "küçük Hyperlambda katmanının" neredeyse hiçbir ek maliyeti yoktur. Ek olarak, Hyperlambda'nın değerlendirme süreci de aşırı derecede optimize edilmiştir. Hyperlambda, esasen% 100 "eşzamansızdır", yani Hyperlambda dosyalarını değerlendirirken C # ve CLR'nin eşzamansız özelliklerini de kullanacağı anlamına gelir. Bu nedenle, herhangi bir "saf" C # veya .NET uygulamasına uygulamayı kolaylaştırmak için çok büyük "iş hacmi" sağlayabilir ve ölçeklenebilirlik özellikleri sağlayabilir. Bana fikrimi sorarsanız, o zaman size söyleyeceğim tek bir satır kod yazmaya gerek yok, yeterince harika değil mi?
Hyperlambda'yı kendi anahtar kelimelerinizle genişletmek, basit bir C # sınıfı oluşturmak kadar kolaydır. Aşağıdaki gerçek bir örnektir, kendime ait bir anahtar kelime kullandım, eğer bir dizge başka dizelerle başlıyorsa doğru döndürür.
ad alanı magic.lambda.strings { public class StartsWith: ISlot { public void Signal (ISignaler signaler, Node input) { // Sağlık kontrolü. eğer (input.Children.Count! = 1) yeni ApplicationException ("aranacak değeri içeren tam olarak bir bağımsız değişken verilmelidir"); signaler.Signal ("eval", giriş); input.Value = input.GetEx < dizi > .StartsWith (input.Children.First.GetEx < dizi > , StringComparison.InvariantCulture); } } }Kendi anahtar kelimelerinizi oluşturmak, sınıfa özellikler ve arayüzler eklemek kadar kolaydır ve ayrıca yeni bir "Hyperlambda anahtar kelimesine" sahip olursunuz. Bu özellik, programlama dilleri için bazı ekstrem "DSL özellikleri" sağlar. Ortaya çıkan Hyperlambda, insanların okuması ve anlaması için daha uygundur.
Ancak, Magic'i kullanmak için Hyperlambda'yı bilmenize gerek yoktur, çünkü bilgisayarınız Hyperlambda'nın nasıl oluşturulacağını ve sürdürüleceğini bilir. Bu nedenle, Hyperlambda ile Magic arasındaki ilişki CLR kodu ve C # ile eşdeğerdir.
Aşağıdaki örnek, bir Hyperlambda HTTP uç noktasını gösterir. Lütfen Hyperlambda'nın kendim tarafından oluşturulduğuna dikkat edin, Hyperlambda'yı DZone'da veya hatta Visual Studio Code'da vurgulamanın bir yolu yoktur Bildiğim kadarıyla, Hyperlambda'nın dünya çapında 5'ten az kullanıcısı var.
Ancak, JavaScript tabanlı bir Hyperlambda editörüm var, Magic'in vazgeçilmez bir parçası.Kodunuzdaki Hyperlambda sözdizimini vurgulayabilir ve ayrıca otomatik olarak tamamlanabilir.
/ * * Uç noktanın kabul edebileceği argümanların beyanı. * / .argümanlar limit: uzun ofset: uzun order: string yön: dize kimlik: uzun isim: dize / * * Aşağıya argümanlar ekleniyor. * / a gg : x: ./*/ slots.signal / * / args get-nodes: x: @. arguments / * / * * "Magic.db.mysql.read" ile çağırma. * / slots.signal: magic.db.mysql.read veritabanı: magic_auth tablo: roller argümanlar sütunlar İD isim / * * Sonuçları arayana iade etme. * Bu, sonucu JSON'a dönüştürecek, * ve istemciye HTTP yanıtı olarak dönün. * / slots.return-nodes: x: @ slots.signal / *Not: Magic yepyeni bir projedir ve bazı hatalar içerebilir. GitHub'da bir milyon yıldız kazanmadı ve bildiğim kadarıyla, Nasdaq'da listelenen hiçbir şirket şu anda onu kullanmıyor. Bu nedenle, değerlendirmek istiyorsanız lütfen sabırlı olun. Kodun kalitesini artırmak ve bulunan tüm hataları düzeltmek için her şeyi yapacağım. Gelecekte de projeyi sürdürmeye devam edeceğim, ancak bazen beta sürümünde bazı yaygın sorunlar olabilir.
GitHub kod depomu kullanabilirsiniz (https: // github .com / polterguy / magic) hataları bildirin veya özellikleri isteyin. Rapor edecek hatanız olmasa bile, umarım projeye öneride bulunur veya teşvik edersiniz.
sonuç olarak
Genel olarak, Magic iş yükünüzü yarı yarıya azaltabilir, bilgisayarın sıkıcı işleri üstlenmesine izin verebilir ve siz ilginç işlere odaklanabilirsiniz. Bilgisayarı icat etmemizin asıl amacı bu değil mi? Umarım Magic'in getirdiği mutluluğu bulabilirsin.
Magic ile ilgili detaylı bilgiler şu şekildedir:
Ana Sayfa: https://polterguy.github.io/
GitHub proje web sitesi: https: // github .com / polterguy / büyü
Destek sistemi: https: // github .com / polterguy / büyü / sorunlar
Orijinal: https: // dzone .com / makaleler / 40 saniyede-net-çekirdek-web-api-oluşturma
Bu makale bir CSDN çevirisidir, lütfen yeniden basımın kaynağını belirtin.
SON