前段时间,笔者写了一个构建 Rust 异步 GraphQL 服务的系列博文,构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb,采用的 Rust web 框架是 Tide。
Rust 消除了在其他语言中流行的各种愚蠢的bug和陷阱,使开发和维护我们的项目变得更加容易。不幸的是,当涉及异步编程中常见问题时,Rust在本质上没有那么强的能力。事实上,异步编程在Rust中要比在 Javascript 中难得多.
目前,web 前端开发方面,通常有两种技术组合:一种是使用模板引擎,主要在服务器端渲染,这种方式对 seo 有较高要求的应用有利;同时,在后续优化方面,也较有优势。另一种则是前端框架,如 yew、react、vue、seed 一类,采用声明式设计;在保证性能下限的前提下,高效且灵活地进行快速开发。
基于开源、快速开发、可靠性,以及高性能的特性,Rust 正在成为最流行的编程语言之一。在 Rust 中构建新的 web API 时,需要着重考虑前端和后端开发,以及所采用 web 框架的优缺点。
Tide 是小型而实用的 Rust web 应用程序框架,为快速开发而构建。它提供了一组健壮的特性,使得构建异步 web 应用程序和 API 更加容易、更为有趣。
上一篇文章中,我们对后端基础工程进行了初始化。其中,笔者选择 Rust 生态中的 4 个 crate:tide、async-std、async-graphql、mongodb(bson 主要为 mongodb 应用)。虽然我们不打算对 Rust 生态中的 crate 进行介绍和比较,但想必有朋友对这几个选择有些疑问,比如:tide 相较于 actix-web,可称作冷门、不成熟,postgresql 相较于 mongodb 操作的便利性等。 笔者在 2018-2019 年间,GraphQL 服务后端,一直使用的是 actix-web + juniper + postgresql 的组合,应用前端使用了 typescript + react + apollo-client,有兴趣可以参阅开源项目 actix-graphql-react。 2020 年,笔者才开始了 tide + async-graphql 的应用开发,在此,笔者简单提及下选型理由——
在以前的构建 Rust 异步 GraphQL 服务系列中,分别采用 tide + async-graphql + mongodb 和 actix-web + async-graphql + rbatis + postgresql / mysql 开发了 GraphQL 服务后端。感兴趣的朋友可以参阅博文——
原文链接: https://www.rotoclone.zone/blog/posts/raspberry-pi-monitoring
actix-web 1.0对于0.7来说,是一次比较彻底的重构。涉及架构重新设计、抽象也由Actor进一步升级到了Service。对于代码层面而言,就是用Service替代了之前的Handler。 1.0的代码也完成遵循Rust惯例,组件化开发,相比于0.7版本的一大坨代码,清爽了很多。
本文简单介绍了在Rust中编写一个工程性更强的组件(crate)所必须要遵循的一些原则:
上一篇文章中,我们对后端基础工程进行了初始化,未有进行任何代码编写。本文中,我们将不再进行技术选型和优劣对比,直接基于 actix-web 和 async-graphql 构建异步 Rust GraphQL 服务的历程。本章主要是 GraphQL 查询服务,包括如下内容:
在 2023 年,在开始开发 API 和 Web 应用程序之前,哪个 Rust Web 框架最适合研究?在这里,我们将看看一些目前使用或看起来很有前途的最流行的框架。
Casbin是基于 Go 语言的权限控制库。它支持 ACL, RBAC, ABAC 等常用的访问控制模型。
今天一篇 "a sad day for rust" 霸榜了 hacker news。actix-web 的作者 fafhrd91 在无法忍受 "unsafe shitstorm" 之后,决绝地将这个在各大评测网站名列第一的 web 框架下线了。一时间社区叫苦不迭,所有使用了 actix-web 作为依赖的项目,都受到(潜在的)影响。这件事的威力虽然不如之前让半个互联网瘫痪的 leftpad 事件,但也够开源社区喝一壶的。
Actix Web 是一个强大的高性能 Web 框架,用于创建从小型到单体的 Web 服务。
压缩工具compress-tools 0.6.0发布。compress-tools是基于libarchive的开发的,并提供部分原库的压缩功能。这个工具现在可以解压:
本系列博客中,我们使用 Tide + async-grapqhl + mongodb + jsonwebtoken + handlebars-rust 构建基于 Rust 技术栈的 GraphQl 服务。同时,我们需要做到前后端分离。
这篇文章涵盖了使用声明宏、过程宏来避免在编写嵌入式代码中遇到的坑:当Embedded Rust编码器调用Mynewt API,驱动程序和其他C函数时,可能会出现字符串相关的问题。为了解决这个问题,作者使用Rust的宏创建了一个新的类型Strn,它表示一个永远不会被修改的以null结尾的字符串。
GitHUB: https://github.com/jacob-pro/actix-extensible-rate-limit
下面的图表来自评测游戏,显示了Rust与其他编程语言相比是多么的快。你可以在这里找到Go语言的对比。
在入口文件中,首先启用了一些库的宏(Macro),并声明了 Actix-Web 框架的 main 函数;
WebAssembly 相对其它 web 标准来说,稍显新颖。但 wasm 的应用范畴和方向,却十分广阔。关于其优势所在,本文不做赘述,网上有许多分析比较的文章。我们从 Rust 周报趋势来领会,可以发现 Rust 官方在 WebAssembly 上投入了不少精力。Rust 社区中,Rust + WebAssembly 的应用也比较热门,其文章和话题增长趋势显著。
这个教程非常完整,基于actix-web 1.0和Diesel实现的一个基于JWT认证的微服务系统。
Rash是一种受Ansible工具启发的Declarative Shell脚本语言。
在之前的用 Rust 搭建 React Server Components 的 Web 服务器我们利用了Axum构建了RSC的服务器。也算是用Rust在构建Web服务上的小试牛刀。
小编整理了Actix作者的原文,及Rust社区对此事件的一些评论文章,供大家借鉴。
Github: https://github.com/actix/actix-web/releases/tag/web-v4.0.0-rc.1
作者分别使用 Kotlin 和 Rust 的不同框架写了同样的微服务, 并且对其进行了压测对比. 之所有没有直接引用别人的压测结果(例如著名的 techempower: Web Framework Benchmarks), 而且是选择自己完全手写项目来测试,是因为:
本教程将指导您如何从零开始,使用 Rust 为嵌入式系统编写单片操作系统内核. 它涵盖了常见操作系统任务的实现,比如写入串行控制台, 设置虚拟内存和处理硬件异常.
本文主要探索了在 rust 中进行单元测试和集成测试的一些方式, 虽然是讲 测试为主,但是作者从 DI(依赖注入)的视角讲述了使用 cfg 来实现不同的环境进行不同的初始化的一些思路.
wasm-pack,该工具旨在成为一站式平台,用于构建Rust生成的WebAssembly,希望使用它与JavaScript,浏览器或Node.js进行互操作。同时该项目是rust-wasm工作组的一部分。
通过解析1000行JSON字符串到String,SmolStr和SmartString,看看他们的性能和内存特征。干货文章
有一种技术叫记忆化(memoization),可以避免函数的多次计算,从而节省资源。顾名思义,记忆化技术可以把函数的调用结果记忆下来,或者说缓存下来。
前 2 篇文章《crate 选择及环境搭建》和《获取并解析 GraphQL 数据》中,我们已经整合应用 tide、graphql-client、handlebars,以及 surf,从 GraphQL 服务后端 API 获取 GraphQL 数据并解析、渲染到 html 模板。这已经是一个完整的技术组合,其成熟度足以用于生产环境,构建自己的想法和应用了。
Rust目前最火的两个web框架就是Actix-Web和Rocket, 众所周知,Rocket的优势在于易用性,Actix-web在于性能,最近,Rocket的人员正在迁移到异步后端。因此,作者想看看异步分支和主分支如何的性能如何同时和Actix-Web进行比较是很有趣的。
由图可见,tokio 生态目前在网络服务和Web 开发方面基本的核心组件都已齐全。尤其是随着 Axum 框架的推出,tokio 在 Web 生态已接近完备。
Cube.js 是一个开源的分析 API 平台。它主要用于构建内部商业智能工具或将面向客户的分析添加到现有应用程序中。
芽之家书馆主要目标为 IT 行业的教育、分享、实践,以及布道新技术。包括—— 1、新技术和教育趋势的大数据分析; 2、原创、翻译的开源新技术书籍、资料分享站点; 3、新技术的应用实践、开源; 4、新技术布道。
📷 参考: https://github.com/x931890193/rust_blog # Cargo.toml [package] name = "rust_blog" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] actix-protobuf =
像Golang 借助微服务和云原生的春风,构建了强大的生态系统。Python在数据分析和机器学习,构建了简洁实用的生态系统。
IntelliJ Rust 又更新了 #100 主要新增了 const 常數關鍵字的高亮支持 read more Scriptkeeper 一個輔助測試 Bash 的程式 假如你原本有個 #!/usr/bin/env bash if [ -z "$(git status --porcelain)" ] ; then commit=$(git rev-parse HEAD) docker build --tag image_name:$commit . else exit 1 fi 你可以改成
AdGear公司(一家实时广告平台)开源的库。这个库采用了与Rust中大多数其他异步IO库完全不同的方法:它实际上受到了Pony编程语言的启发。 因此,它不使用Futures,它不使用async/await,它只提供简单的trait。
Rust 是一门神奇的编程语言,有非常好的 CLI 工具,比如 ripgrep 和 exa。像 Cloudflare 这样的公司正在使用并鼓励人们写 Rust 来运行微服务。Rust 编写的软件可能比 C++ 或 C 更安全、更小、更简洁。
应用架构是一个系统的高级结构。它是关于系统的一系列决策,包括系统的组成部分、这些部分之间的交互,以及对这些部分的引导性指南。这些决策通常是由企业的IT团队和关键干系人员共同作出的。
作者认为目前的孤儿规则是安全的,但是过于严格. 随着 Rust 的发展, 作者认为是时候需要对 孤儿规则 进行一定的弱化,并且提出了自己的一些想法.
首先,我们通过 shell 命令 cd ./actix-web-async-graphql-rbatis/backend 进入后端工程目录(下文中,将默认在此目录执行操作)。
Rust 编译器编译并运行于很多平台之上,但不是所有的平台都被同等支持。Rust 对平台的支持被分为Tier-1,Tier-2,Tier-3三个等级,对其编译和运行的保证程度逐级递减。
ReadMore:https://github.com/actix/actix-web/tree/master/awc
基于 Hendrik Sollich 在 4 年前的工作,作者添加了一些常用的函数和宏的基准结果:
来自国内社区 NameFactory ,他在用Rust实现一门动态语言,并且在知乎里记录了他的心路历程。大家可以关注一下,支持一下。
领取专属 10元无门槛券
手把手带您无忧上云