搭建后端可能让人感到不知所措,因为选择太多。
通过正确的工具和方法的组合,你可以更快地开发出更稳健的应用,从而大大加快开发过程。
今天我们将探索七种构建后端系统的实用方式,每一种方式都结合了强大的框架、工具和库。
这会让你惊讶。
…
1. 使用Encore(Encore)作为后端框架。使用云服务构建可扩展的应用程序时,开发人员经常会遇到较差的开发体验。他们不得不管理复杂的基础设施,并重复执行繁琐的任务,这会让他们慢下来。
Encore 帮助直接解决这个问题,它提供了一个开源的后端框架,支持 TypeScript 和 Go,让你在应用中定义基础设施为类型安全对象,从而将你的基础设施和应用代码统一起来。
encore 可以通过解析应用程序代码来自动化基础设施供应和 DevOps。这使得开发人员能够快速创建可投入生产的后端,使用微服务、Postgres 和 Pub/Sub 等工具,而无需处理通常的复杂性和 DevOps 烦恼。您还能获得:
✅ 利用本地仪表板进行追踪和日志记录。
✅ 自动架构图提供实时概览图。
✅ 一个 API 测试器帮助您测试 API 端点。
根据GitHub上的基准代码,Encore.ts在冷启动方面比Express快5倍多,比NestJS快17倍。
你可以看看这个介绍视频,了解Encore的大部分内容。
如果你不知道要构建什么,感到困惑的话,你可以查看教程和入门应用,这些都是Encore团队提供的。
🎯 一个坚实的理由是,为什么选择 Encore?
encore 帮你搞定云基础设施和 DevOps。这意味着你可以专心写代码,而不需要处理复杂的设置。它非常适合想要开始开发,而无需操心这些琐事的开发者。
Encore 在 GitHub 上获得了 8000 颗星,他们还运营着一个有超过 1000 名成员的 discord 社区。
……
2. 后端即服务,带ORM。常被低估的一种方法是使用后端即服务,这简化了服务器基础设施的管理工作,并加快了开发进程。
🎯 后端即服务(BaaS)指的是什么?
后端即服务(BaaS,Backend as a Service的简称)是一种云计算模型,为开发人员提供诸如用户认证、数据库管理、云存储、API SDK、实时通知功能等预先构建的后端服务。
它让开发者在无需担心服务器基础设施的问题的情况下构建前端。一些流行的选择有[Appwrite](Appwrite官网: https://appwrite.io/)和[Supabase](Supabase官网: https://supabase.com/)。
🎯 什么是 ORM 呢?
对象-关系映射(ORM)是一种编程技术,它帮助开发人员使用面向对象的编程语言更轻松地与关系型数据库进行交互。它像一座桥梁一样,使开发人员可以以对象形式处理数据,而无需编写复杂的SQL查询。
简单来说,开发人员可以使用他们喜欢的编程语言定义数据模型,而 ORM 自动处理数据库底层交互。这加快了开发进度,并减少了出错的可能性,因为他们处理的是对象而不是直接操作 SQL 或数据库结构的复杂性。
Prisma ORM 旨在让 Node.js 和 TypeScript 应用程序的数据库交互更加容易。它提供了类型安全的查询语句、直观的 API、自动化的迁移,并使用声明性模式定义将数据库逻辑与应用逻辑分离。
让我们看看如何将Prisma与这两种选择结合起来。
-→ Supabase, Prisma.
⚡ Prisma 提供了用于 PostgreSQL 的类型安全查询构建工具,通过在编译时检查查询语句来减少运行时错误。
⚡ Supabase 和 Prisma 的结合提供了现代的开发体验感,配备了如 Prisma Studio 等数据管理工具,以及 Supabase 提供的实时功能,使得构建响应式应用变得更加简单。
⚡ Supabase的实时功能与Prisma的强大查询能力相结合,为复杂的应用场景提供了坚实的基础。
点击这里查看 Supabase 图标
这个选项非常适合希望拥有强大 PostgreSQL 后端、实时能力以及类型安全的数据库交互的开发者。
你可以阅读如下链接中的官方指南,了解如何使用 Prisma 连接 Supabase:如何使用 Prisma 与 Supabase。
Appwrite, Prisma.
如 GitHub issue 3005,它还没有集成到 Appwrite 生态系统中。这样的话,你可以继续使用之前的选项。
⚡ 集成 Prisma 可以让开发人员管理复杂的数据库操作,同时还能处理诸如认证和存储之类的服务。
⚡ 有很多适用于各种框架的 SDK,开发人员也可以实现自己的自定义逻辑。
🎯 一个明确的理由,为什么选这个?
你将获得即时的API和轻松管理数据库,几乎无需任何配置。这非常适合独立开发者或小型团队快速搭建现代技术堆栈。
此处为空
3. NestJS 使用 TypeORM.NestJS 是一个使用 Node.js 和 TypeScript 构建高效且可扩展的服务器端应用程序的框架。它提供了一种促进模块化架构(借鉴 Angular 的架构)的结构化方法,以及使用依赖注入、中间件、WebSocket 通信和装饰器。
它默认使用 TypeScript,并且兼容多种库和框架,如 Express 或 Fastify。它常用于构建 RESTful API 服务、GraphQL API 和微服务。
你可能已经注意到了,我推荐了TypeORM在Nestjs中使用,而之前推荐的是Prisma。
这是因为 TypeORM 使用装饰器(如 @Entity
,@Column
)直接应用到 TypeScript 类中来定义数据库结构,而 Prisma 使用一个专用的模式文件(schema.prisma
),该文件使用它自己的声明性语法编写。
⚡ NestJS 和 TypeORM 都是用 TypeScript 构建的,TypeScript 提供了强大的类型检查。
⚡ NestJS推崇模块化结构,使代码更容易组织成独立的模块,而TypeORM非常适合这种结构。
⚡ 使用 TypeORM,开发人员可以轻松管理实体之间的关系,执行迁移操作并处理事务操作,这有助于构建一个可扩展的应用。
您可以在 Nestjs 的官方文档中找到更多关于如何使用 TypeORM 开始开发的指导。请注意,原文中的链接应保持不变,即:如何使用 Nestjs 开始使用 TypeORM。
🎯 一个确实的理由,为什么这个选项?
高度模块化且可扩展,非常适合那些熟悉 Node.js 的开发者构建结构良好的后端服务。你将获得强大的模块化架构和强大的社区支持。
4. Hasura 与 GraphQL 代码生成
(注:在Markdown格式下,中文标题通常不需要句号,且编号后应加空格以保持格式一致)
根据Markdown格式和专家建议,最终翻译为:
4. Hasura 与 GraphQL 代码生成Hasura 是一款开源的 GraphQL 引擎,它可以连接到您的数据库及微服务,瞬间提供一个即插即用型的 GraphQL API。
根据你的数据库模式,它可以瞬间生成 GraphQL API,因此开发人员无需编写大量的后台代码,就可以查询和操作数据。
GraphQL Code Generator 是一个工具,这个工具根据你的 GraphQL 模式和操作(例如查询、突变和订阅)生成代码。它可以自动生成适用于各种编程语言和框架的类型化输出。
这是一张关于GraphQL代码生成器的图片。
GraphQL Code Generator 和 Hasura 结合好在哪里?
⚡ GraphQL Code Generator 通过根据 GraphQL 架构自动生成与之匹配的 TypeScript 类型和钩子来增强 Hasura 的功能。
⚡ 它消除了开发人员手动定义类型和接口的需求,从而节省了时间,并减少因拼写错误或不一致给客户端和服务器带来的风险。
⚡ 生成的类型充当了 API 的文档,让开发者更容易弄清楚哪些数据可用以及如何与其互动。
⚡ 使用自动生成的查询、变异和订阅,开发人员可以快速实现功能特性,而无需担心类型定义与 GraphQL 架构不同步。
🎯 为什么选择这个选项?
即时生成的 GraphQL API 和自动生成的前端代码可以节省时间。非常适合开发人员用来构建现代的 API 驱动的应用程序。
5. 来一杯金酒。
golang 是一种由 Google 设计的静态类型语言、编译型编程语言,因其简洁性而闻名,并且是构建高性能、可扩展后端的理想选择。它非常适合需要应用快速和可控的开发者。
Gin 是一个用 Go (Golang) 编写的 Web 框架。它提供了一系列快速构建 RESTful API 的工具,具有零分配路由、中间件支持、内置模版渲染、JSON 校验等功能。它的 API 类似于 Martini,在性能上大约快 40 倍于 Martini。
选择喝金酒为什么是个棒组合?
⚡ Go 的快速和简洁,结合 Gin 极简的设计和快速的 HTTP 路由,使其成为构建 web 服务器和 API 的最快组合之一中的佼佼者。
⚡ Go 内置的 goroutine 并发模型使得你的后端可以轻松地扩展,尤其适合处理大流量。
⚡ 使用 Gin,你可以内置获得路由、中间件和请求处理功能,无需额外配置,这让你可以专注于构建功能而不是忙于处理样板代码。
你可以阅读这篇教程《如何用Go和Gin开发RESTful API》(https://go.dev/doc/tutorial/web-service-gin)。
🎯 这个选项的明确原因是什么?
Go with Gin提供极快的性能和几乎无开销的特点,非常适合用来构建可扩展和高性能的后端。非常适合懂Go的开发者以及需要完全控制而不损失速度的开发者。
6. 使用 Django 及 Django REST Framework。
Django 是一个鼓励快速开发和简洁而实用的设计的高级的 Python 网络框架。它以“自带所有需要的工具”为理念,例如自带许多工具(例如管理界面),大大节省了开发时间和精力。
Django REST Framework (DRF) 是一个强大的工具包,用于在 Django 中构建 Web API 等。它通过提供序列化、认证和视图集处理等功能来简化创建 RESTful API 的过程,并能与 Django 无缝集成。
Django REST Framework 的图像如下所示。。
为什么Django搭配Django REST Framework这么好
⚡ Django 自带了一切你需要的功能,包括后台管理系统、认证系统和数据库ORM,所以你可以快速搭建后端而不需要额外的设置。
⚡ DRF 让创建 RESTful API 变得非常容易,它提供了内置的功能,如序列化器、视图集和认证机制。这不仅减少了开发人员的代码编写量,还保持了功能的完整性。此外,它还提供了一个可浏览的 web API 接口,使得任何人都可以更轻松地在开发过程中测试端点并与其 API 进行交互。
⚡ Django的强大架构设计结合Django REST框架提供了可扩展性,并具备强大的安全特性,如抵御SQL注入、XSS和CSRF攻击。
🎯 一个明确的原因,为什么选这个?
一个快速、安全且可扩展的解决方案,使用最少的设置即可用Python构建强大的API。强大的社区支持和内置工具使其非常适合独立开发者寻找可靠解决方案。
7. 使用 Payload 作为 Next.js 一个内置的无头内容管理系统。
Next.js 是一个著名的 React 框架,以构建现代、服务器端渲染或静态网页应用的灵活性而著称。它使创建快速、搜索引擎友好型的网站变得简单,并具备诸如自动代码分割、动态 HTML 流式传输、React 服务器组件等功能,以及自动优化(图像、字体、脚本)和路由处理器等更多实用特性。
我目前大多数项目都使用 Nextjs,它是一个基于 React 的 JavaScript 框架。
PAYLOAD 是一个专为使用 Next.js 的开发者打造的无头 CMS。随着 v3 版本的发布,它变得 Next.js
原生,这意味着它可以平滑地整合 Next 路由处理程序、应用路由以及其他相关概念。
我在它还是测试版的时候实际上用了它来测试,并写了关于它的文章《如何在任何 Next 应用中用一行代码添加 CMS》。
为什么 Next.js 和 Payload 是绝配?
⚡ Payload可以直接安装到你的next.js应用文件夹中,不仅提供管理面板,还包括后端,无需依赖任何第三方服务。这种集成通过将前后端整合在同一位置,使开发过程更加顺畅。
⚡ Payload 提供了一个很好的管理界面,便于内容管理,让创建和组织数据模型变得轻松,同时还能利用 next.js 的动态渲染功能。
⚡ 使用 Payload 的本地 API,开发人员可以直接从服务器上的组件和函数查询和变更数据,从而实现快速的数据管理和变更,无需依赖外部 API。
⚡ 开发人员可以将 Payload 部署到任何地方,包括无服务器环境(例如 Vercel)或容器中,为他们提供了选择自己偏好的托管方案的自由。
它已经是一个稳定的版本,在“稳定”和“版本”之间添加了空格。您可以在官方博客上了解更多关于 Payload 3.0 如何直接安装到任何 Next.js 应用中的信息。更多详情请参阅 如何将 Payload 3.0 直接安装到任何 Next.js 应用中。
🎯 一个确凿的理由,为什么选这个?
这是构建现代、内容驱动的应用的最佳途径,通过将强大的内容管理无缝集成到应用结构中,从而避免处理独立后端服务的复杂性。
我试着涵盖了一些不太常见的方法,还有许多其他不错的选项,比如:
-
Django + Celery - 非常适合处理任务队列和后台任务,特别是在需要异步处理的项目中,。但如果后台任务不是项目的核心需求,Celery 可能会给项目增加不必要的复杂性。
-
Firebase Functions + Express.js - Firebase Functions 结合 Express.js 提供了一种无服务器架构,非常适合动态且轻量的应用程序。它们简化了基础设施的运维,但使用量增加时可能会变得昂贵。
-
Spring Boot + Hibernate - 适合大型企业应用,但对于较小的项目来说可能有些过分强大。如果你偏爱 Java,这可能是个不错的选择。
-
Ruby on Rails + ActiveRecord - 非常适合快速原型开发,其约定优于配置的理念和众多的自动化功能非常出色。虽然对于较小的项目来说 Rails 可能会感觉有点臃肿,但对于熟悉 Ruby 的开发者来说,它依然是个不错的选择。
-
Node.js + Express.js - 一个流行且轻量的选择,用于构建 JavaScript API。其灵活性可能带来优势,但相比那些意见丰富的框架,可能需要更多的决策和自定义设置。
-
Flask + SQLAlchemy - 简洁且灵活,适合小型项目(避免使用更复杂的框架)。SQLAlchemy 在数据库管理上非常合适,没有多余的负担。对于 Python 开发者而言是绝佳的选择。
-
FastAPI + Pydantic - 快速且易于 Python 开发者上手。它小巧、直观,确保数据的正确性,非常适合快速开发的项目。
- Laravel + Eloquent - Laravel 通过其内置工具和友好的开发者框架,大大提升了 PHP 开发的效率。结合 Eloquent ORM,非常适合快速构建现代后端系统,特别是对于 PHP 爱好者而言。
而且我相信还有更多的选择,特别是在技术进步飞快的情况下。
重要的是一些有良好社区的项目,选择那些你不会陷入困境或者感到孤立无援的。
说实话,这真的挺难写的,因为我对应该用哪套技术组合来达到最佳效果感到很迷茫。
以下是一些构建复杂后端系统的最好的方法的开始。
如果你觉得还有更实用的搭配,请让我知道。
祝你今天过得愉快!回头见 :)
我还有一个面向开发者和技术写作者的社区(已有200多位成员),我会在那里分享我的学习心得。你可以在dub.sh/opensouls加入我们。
如果你喜欢这篇内容, 请继续关注我获取更多精彩内容 :) 感谢您的阅读,Anmol 🥰 |
---|
GIF