.Net Core Web API'si 40 saniyede nasıl oluşturulur?

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

Yurtdışında okurken her türden oda arkadaşının büyük bir envanteri vuruldu mu?
önceki
iyi haberler! Xinjin, "İş Ortamı için Çin'in İlk 100 Pilot İlçesi ve Şehri" ödülüne layık görüldü.
Sonraki
Noel seyahati referansı Dünyanın "en fotojenik" kış masalı kasabası, kaçırılmaması gereken
Bu özellikler, ana kuvvet yukarı çekilmeden önce ortaya çıkacaktır. "Ağır sesle alçak pozisyondan geç" araca binmek için sinyaldir.
Kargaşadaki Didi: Drone'dan karaya ne kadar uzakta?
İşlem hacmi istifleme stratejisi: En alttaki "istifleme hacmi" hisse senetleri, geri aramadan sonra genellikle hızla yükselen bir moda başlar ve madenciliğe odaklanabilirsiniz.
Yabancıların Tayland'ı anlayamadığı birkaç şey
Sadece "20 günlük çizgi + dönüm noktası ticareti" yüzünden 3 yılda 50.000'den 5,5 milyona nasıl çıktım, küçük fonlar hızla genişledi ve neredeyse tüm karı tüketti
14 ulusal çift sınıflı üniversitenin kabul memurları Rizhao 1 Nolu Ortaokuluna yürüdü
Tayland'da bilmediğiniz tıbbi tedavi sizi kesinlikle şaşırtacak
Savcı, Fangxian, Hubei'deki tarihi bir sitenin yasadışı inşaatının yıkılmasını tavsiye etti
PyTorch agresif ve programcılar TensorFlow'u terk mi ediyor?
"Hisse senetlerini seçmek, zamanı ve ivmeyi seçmek için zamanı seçmekten daha iyidir"! Bu makaleyi anlayın, ana hisse senedi toplama yöntemleri hakkında bilgi edinin ve on yıl boyunca sapmadan kaçınm
Her yerde ekolojik deniz yosunu evleri, en güzel balıkçı köyü Rongcheng Dongchudao Köyü
To Top