百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

如何在 40 秒内创建一个.Net Core Web API?

liuian 2025-02-20 16:45 17 浏览

为什么我们需要自己写代码?为什么计算机无法自动为我们生成这些代码呢?很显然,我们应该可以利用这些共同点,从一个给定的数据库自动化构建系统——这就是“我”创建Magic的初衷。

作者 | Thomas Hansen

译者 | 弯月,责编 | 郭芮

出品 | CSDN(ID:CSDNnews)

以下为译文:

作为一名C#开发人员,我坦白虽然我很喜欢C#,喜欢它的强类型、编译器、泛型、LINQ等等,但有时我也会嫉妒PHP和Python开发人员。Python和PHP在本质上更为动态,而且还可以实现C#几乎不可能完成的任务。大约在一年前,我的一位朋友向我展示了Django,我羞愧地承认.NET没有类似的功能。因此,我决定通过自己的努力创造奇迹,于是我创建了Magic。

CRUD、HTTP和SQL

在软件开发人员眼中,很多问题都可以归结为将JSON从客户端传输到后端。这个问题是如此普遍,所以我们总结出了一个缩写CRUD:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。HTTP请求的类型有post、put、delete和get。SQL拥有insert、update、delete和select。可以说,所有这些操作都基于相同的概念,即CRUD。

因此,很显然我们应该可以利用这些共同点,从一个给定的数据库自动化构建系统。为什么我们需要自己写代码?为什么计算机无法自动为我们生成这些代码呢?

Magic

我创建的Magic能够从数据库架构中读取元信息,并利用这些信息来创建HTTP REST端点的脚手架代码,并对数据库中的每个CRUD操作提供封装。我们的目的是在控制器端点和数据库之间建立一层薄薄的“ Hyperlambda”,你只需轻轻点击一个按钮,就可以创建和公开数据库上所有的CRUD操作。

Hyperlambda是一种动态编程语言,也是一种DSL,它不需要编译,但是它能够快速处理这些类型的操作,因为每个Hyperlambda关键字只不过是C#中的类的封装。

因此,我们很容易创建Hyperlambda“关键字”,并通过这些关键字对客户端进行身份验证和授权、将记录插入到我们的数据库中、读取记录等,所有的操作只需几行代码即可实现。它的语法非常容易理解,而且计算机也很容易理解,这样用户可以通过对关键字的排列来创建代码的脚手架。

演示过程:
https://youtu.be/ncH4QRpKvx0

在这段视频中,Magic首先会读取数据库中每个表的数据库架构。然后,创建四个Hyperlambda文件,每个CRUD操作一个文件。这些Hyperlambda文件的路径取决于数据库对象的名称,因此,假设数据库名为“ foo”,表名为“ bar”,那么HTTP GET的路径为“
/files/magic/foo/bar.get.hl”,指向包含Hyperlambda文件的磁盘物理路径。

接下来,我通过一个动态路由控制器接受“/magic”下面的“任何” URL。该路由负责解析我的Hyperlambda文件,并根据给出的URL,执行相应的HTTP动词。

那么,现在我可以在运行时自动创建Hyperlambda代码了,这些代码可以封装现有的数据库,却不会中断应用程序的正常使用。此外,我还通过一个路由机制将HTTP请求动态路由到服务器中的文件和文件夹(之前创建的文件)。

对于小规模的简单应用程序来说,整个后端的Web API就这么多,下一步你可以立即开始创建Angular或React的前端了。而复杂的应用程序可能需要上面没有提供的其他功能,但是至少你的后端已有了基本的雏形,接下来你可以随意编写C#代码和.Net控制器。

Magic基本上就相当于“面向.Net Core和C# 的Django”。即使你的应用根本不需要CRUD,但如果你使用MySQL或微软的SQL Server,它仍然可以作为一个出色数据库管理系统,帮助你在生产和开发环境中管理数据库。从这个角度来说,它相当于“面向.Net Core的PHPMyAdmin”。

功能简介

Magic可以自动处理身份验证和授权。例如,可以为每个HTTP端点分配一个“角色”列表(以逗号分隔),客户端必须经过身份验证才能执行端点的代码。这个实现采用了JWT令牌,它会在调用“身份验证” HTTP端点时生成并返回给客户端。

由于Magic本身可以兼容所有的数据库,因此仍需要在这些方面进行一些手工操作。但实际上只是复制/粘贴的工作,你可以根据需要在生产中进行。顺便说一句,有人可能对密码存储感兴趣,我在这里说明一下:密码的存储采用了BlowFish散列(“慢散列”),还支持独立的加盐算法。

你还可以通过Magic通知脚手架代码的生成过程,要求将各个端点上的HTTP请求写入日志。默认情况下,Magic使用log4net,但你可以创建自己的日志接口并替换,然后通过依赖注入提供给Magic。实际上,Magic中的所有内容都是基于IoC和依赖注入的。

另外,你可以声明希望它提供支持的CRUD操作。例如,某些数据库表可能是“只读”,在这种情况下你根本不需要删除或更新端点。你只需修改生成脚手架代码过程中的一个简单的复选框。

Magic超级快。首先,每个Hyperlambda文件的大小都很小——大约只有10-20行代码。因此,与执行和处理针对某些数据库的SQL命令的昂贵过程相比,解析和评估Hyperlambda文件几乎没有成本。

因此,这种“微小的Hyperlambda层”几乎没有额外的成本。此外,Hyperlambda的评估过程也已经优化到了极致。Hyperlambda本质上是百分百“异步”,这意味着它在评估Hyperlambda文件时也会使用C#和CLR的异步功能。因此,可以带来巨大的“吞吐量”,并提供了可扩展性功能,以方便应用到任何“纯” C#或.NET的应用程序中。如果你问我的看法,那么我会告诉你一行代码都不用写,难道不够伟大吗?

通过你自己的关键字扩展Hyperlambda就像创建一个简单的C#类一样容易。下面是一个真实的示例,我使用了自己的一个关键字[strings.starts-with],如果某个字符串以其他字符串开头则返回true。

Bash
namespace magic.lambda.strings{[Slot(Name = "strings.starts-with")]public class StartsWith : ISlot{public void Signal(ISignaler signaler, Node input){// Sanity checking.if (input.Children.Count != 1)throw new ApplicationException("[strings.starts-with] must be given exactly one argument that contains value to look for");signaler.Signal("eval", input);input.Value = input.GetEx.StartsWith(input.Children.First.GetEx, StringComparison.InvariantCulture);}}}

创建自己的关键字就像向类添加属性和接口一样简单,而且你还有一个新的“ Hyperlambda关键字”。这个功能为编程语言提供了一些极端的“DSL功能”。由此产生的Hyperlambda更方便人类的阅读和理解。

然而,你无需了解Hyperlambda即可使用Magic,因为你的计算机明白如何创建和维护Hyperlambda。因此,Hyperlambda与Magic的关系就相当于CLR代码与C#。

如下示例演示了一个Hyperlambda HTTP端点。请注意,由于Hyperlambda是我自己创建的,因此在DZone甚至在Visual Studio Code中都没有办法高亮显示Hyperlambda,据我所知,Hyperlambda在全球范围内只有不到5个用户。

但是,我有一个基于JavaScript的Hyperlambda编辑器,它是Magic不可或缺的部分,它可以在你的代码中高亮显示Hyperlambda语法,而且也可以自动补齐。

Bash
/** Declaration of arguments the endpoint can accept.*/.argumentslimit:longoffset:longorder:stringdirection:stringid:longname:string/** Appending arguments in [slots.signal] below.*/add:x:./*/slots.signal/*/argsget-nodes:x:@.arguments/*/** Invoking [slots.signal] with "magic.db.mysql.read".*/slots.signal:magic.db.mysql.readdatabase:magic_authtable:rolesargscolumnsidname/** Returning the results to caller.* This will transform the result to JSON,* and return to the client as the HTTP response.*/slots.return-nodes:x:@slots.signal/*

注意:Magic是一个全新的项目,可能包含一些bug。它还未能在GitHub上赢得一百万颗星,而且据我所知,目前没有任何纳斯达克上市公司在使用它。因此,如果你想对其进行评估,请耐心等待。我会全力以赴提高代码的质量,并且修改所有发现的bug。将来我会持续维护该项目,但有时可能会出现一些测试版中常见的问题。

你可以通过我的GitHub代码库(https://github.com/polterguy/magic)汇报bug或请求功能。即便你没有可以汇报的bug,我也希望你对该项目提出建议或给予鼓励。

总结

总的来说,Magic可以减轻你一半的工作量,让计算机来承担无聊的工作,而你则可以专注于有趣的工作。这不正是我们发明计算机的初衷吗?希望你能找到Magic带来的快乐。

有关Magic的详细信息如下:

  • 主页:
    https://polterguy.github.io/

  • GitHub项目网站:https://github.com/polterguy/magic

  • 支持系统:https://github.com/polterguy/magic/issues

原文:https://dzone.com
/articles/creating-a-net-core-web-api-in-40-seconds

本文为 CSDN 翻译,转载请注明来源出处。

【END】

相关推荐

【常识】如何优化Windows 7

优化Windows7可以让这个经典系统运行更流畅,特别是在老旧硬件上。以下是经过整理的实用优化方案,分为基础优化和进阶优化两部分:一、基础优化(适合所有用户)1.关闭不必要的视觉效果右键计算机...

系统优化!Windows 11/10 必做的十个优化配置

以下是为Windows10/11用户整理的10个必做优化配置,涵盖性能提升、隐私保护和系统精简等方面,操作安全且无需第三方工具:1.禁用不必要的开机启动项操作路径:`Ctrl+S...

最好用音频剪辑的软件,使用方法?

QVE音频剪辑是一款简单实用的软件,功能丰富,可编辑全格式音频。支持音频转换、合并、淡入淡出、变速、音量调节等,无时长限制,用户可自由剪辑。剪辑后文件音质无损,支持多格式转换,便于存储与跨设备播放,满...

Vue2 开发总踩坑?这 8 个实战技巧让代码秒变丝滑

前端开发的小伙伴们,在和Vue2打交道的日子里,是不是总被各种奇奇怪怪的问题搞得头大?数据不响应、组件传值混乱、页面加载慢……别慌!今天带来8个超实用的Vue2实战技巧,每一个都能直击痛...

Motion for Vue:为Vue量身定制的强大动画库

在前端开发中,动画效果是提升用户体验的重要手段。Vue生态系统中虽然有许多动画库,但真正能做到高性能、易用且功能丰富的并不多。今天,我们要介绍的是MotionforVue(motion-v),...

CSS view():JavaScript 滚动动画的终结

前言CSSview()方法可能会标志着JavaScript在制作滚动动画方面的衰落。如何用5行CSS代码取代50多行繁琐的JavaScript,彻底改变网页动画每次和UI/U...

「大数据」 hive入门

前言最近会介入数据中台项目,所以会推出一系列的跟大数据相关的组件博客与文档。Hive这个大数据组件自从Hadoop诞生之日起,便作为Hadoop生态体系(HDFS、MR/YARN、HIVE、HBASE...

青铜时代的终结:对奖牌架构的反思

作者|AdamBellemare译者|王强策划|Tina要点运维和分析用例无法可靠地访问相关、完整和可信赖的数据。需要一种新的数据处理方法。虽然多跳架构已经存在了几十年,并且可以对...

解析IBM SQL-on-Hadoop的优化思路

对于BigSQL的优化,您需要注意以下六个方面:1.平衡的物理设计在进行集群的物理设计需要考虑数据节点的配置要一致,避免某个数据节点性能短板而影响整体性能。而对于管理节点,它虽然不保存业务数据,但作...

交易型数据湖 - Apache Iceberg、Apache Hudi和Delta Lake的比较

图片由作者提供简介构建数据湖最重要的决定之一是选择数据的存储格式,因为它可以大大影响系统的性能、可用性和兼容性。通过仔细考虑数据存储的格式,我们可以增强数据湖的功能和性能。有几种不同的选择,每一种都有...

深入解析全新 AWS S3 Tables:重塑数据湖仓架构

在AWSre:Invent2024大会中,AWS发布了AmazonS3Tables:一项专为可扩展存储和管理结构化数据而设计的解决方案,基于ApacheIceberg开放表格...

Apache DataFusion查询引擎简介

简介DataFusion是一个查询引擎,其本身不具备存储数据的能力。正因为不依赖底层存储的格式,使其成为了一个灵活可扩展的查询引擎。它原生支持了查询CSV,Parquet,Avro,Json等存储格式...

大数据Hadoop之——Flink Table API 和 SQL(单机Kafka)

一、TableAPI和FlinkSQL是什么TableAPI和SQL集成在同一套API中。这套API的核心概念是Table,用作查询的输入和输出,这套API都是批处理和...

比较前 3 名Schema管理工具

关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。在本文中,读者将了解三种顶级schema管理工具,如AWSGlue、ConfluentSchemaRegistry和Memph...

大数据技术之Flume

第1章概述1.1Flume定义Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。1.2Flume的优点1.可以和...