FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

Amazon 全新轻量级服务器端 Swift 框架:Smoke

  • 2018-10-16
  • 本文字数:3015 字

    阅读完需:约 10 分钟

Amazon Smoke 框架是使用 Swift 语言编写的全新开源轻量级服务器端框架,用于构建类 REST 或类 RPC 的服务。它的架构设计强调易于使用,以及请求处理程序偏向纯函数编程的风格。

通过 Amazon Smoke 创建服务需要三个步骤:

  • 定义处理传入的请求的操作。每个这样的操作是通过一个函数定义的,传入 OperationInput 和通用的 ApplicationContext,并同步或异步地返回 OperationOutput,如下面的代码所示:

    复制代码
    // Synchronous handler
    func handleTheOperation(input: OperationInput, context: MyApplicationContext) throws -> OperationOutput {
    return OperationOutput()
    }
    // Asynchronous handler
    func handleOperationAsync(input: OperationInput, context: MyApplicationContext,
    responseHandler: (SmokeResult<OutputAttributes>) -> ()) throws {
    let result = OperationOutput()
    rensponseHandler(.response(attributes))
    }

输入和输出类型必须符合 ValidatableCodable 协议,该协议可以通过 validate 函数验证输入和输出字段。

  • 说明如何选择操作处理程序来处理传入的请求。Smoke 提供了一个 StandardSmokeHTTP1HandlerSelector,它可以作为类 REST 服务开箱即用,根据其 HTTP 动词和 URI 选择已给定的请求处理程序:

    复制代码
    import SmokeOperations
    public typealias HandlerSelectorType =
    StandardSmokeHTTP1HandlerSelector<MyApplicationContext, JSONPayloadHTTP1OperationDelegate>
    public func createHandlerSelector() -> HandlerSelectorType {
    var newHandler = HandlerSelectorType()
    newHandler.addHandlerForUri("/theOperationPath", httpMethod: .POST,
    operation: handleTheOperation,
    allowedErrors: [(MyApplicationErrors.unknownResource, 400)])
    return newHandler
    }
  • 设置应用程序服务器来解码请求、分配处理程序,将响应编码后发送给客户端。编码和解码是由应用程序代理负责的,作为参数传递给应用程序服务器。Smoke 包含 JSONPayloadHTTP1OperationDelegate 来处理 JSON 请求和响应。应用程序服务器还负责实例化并传输应用上下文:

    复制代码
    import Foundation
    import SmokeHTTP1
    import SmokeOperations
    import LoggerAPI
    // Enable logging here
    let operationContext = ...
    do {
    try SmokeHTTP1Server.startAsOperationServer(
    withHandlerSelector: createHandlerSelector(),
    andContext: operationContext,
    defaultOperationDelegate: JSONPayloadHTTP1OperationDelegate())
    } catch {
    Log.error("Unable to start Operation Server: '\(error)'")
    }

Amazon Smoke 的一个关键概念是应用上下文,它会在启动的时候创建,并可能同步传输给所有的处理程序。Amazon 推荐通过去除线程安全的需求,让该对象变为强类型和不可变,来流化并发的行为。除此以外,它可以是任何类型的。使用上下文可以保证处理程序写为纯函数式的,就是说它们的输出仅仅依赖于它们的输入和传递的上下文。这就让单元测试处理程序变得非常简单,也能向处理程序隐藏开发和部署环境之间的差异。这可以通过上下文传输任何可能引起开发和部署上下文不同的依赖来实现,比如说模拟服务、随机数生成器等等。

Amazon Smoke 搭建于 Apple 的 SwiftNIO 之上,并和 Swift Package Manager 集成。你可以通过添加下面的依赖规则到 package.swift 来引入项目中:

复制代码
dependencies: [
.package(url: "https://github.com/amzn/smoke-framework.git", .upToNextMajor(from: "0.6.0"))
]

Smoke 不仅仅是 Swift 唯一的服务器端框架。其他有名的框架还包括 Vapor Kitura 。与 Smoke 相比,Vapor 和 Kitura 有更清晰的架构,在某种程度上类似 Node Express API。它们还包括很多组件,比如数据库访问、会话和凭证管理以及更多的组件。

查看英文原文 Smoke is a New Lightweight Server-side Framework for Swift from Amazon   

感谢冬雨对本文的审校。

2018-10-16 17:293147
用户头像

发布了 218 篇内容, 共 63.2 次阅读, 收获喜欢 73 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

【活动报名】TiDB 社区天津站 Meetup 要来啦!

TiDB 社区干货传送门

生命科学领域下的医药研发通过什么技术?冷冻电镜?分子模拟?IND?

蓝海大脑GPU

css基本概念学习篇【四】

恒山其若陋兮

5月月更

零基础学Java第四节(字符串相关类)

编程攻略

java编程

Authing 身份云招聘:增长黑客

Authing

招聘 科技

极速调取客户保单,YRCloudFile 助力保险存储架构升级

焱融科技

AI 存储 NAS 数字金融

linux之awk使用技巧

入门小站

Kitex 源码解析活动发布!

baiyutang

Go 字节跳动 微服务 5月月更

Authing 被世界经济论坛评选为 2022 技术先锋企业

Authing

身份云 科技 Idaas 科技企业

大家谈的视频体验指标,都有哪些?如何测定?

声网

视频 Qoe Dev for Dev

JSON在线对比差异工具

入门小站

工具

大模型走向产业的一小步,AI走向普惠的一大步

脑极体

druid 源码阅读(十一)maxWait 参数

爱晒太阳的大白

5月月更

设计者模式之装饰者模式

乌龟哥哥

5月月更

SysAK 应用抖动诊断篇—— eBPF又立功了! | 龙蜥技术

OpenAnolis小助手

Linux 工具 内核 ebpf 龙蜥技术

半年面试数百场,我总结出了这份10w字Java面试复盘笔记

Java全栈架构师

Java spring 程序员 架构 面试

windows下C语言使用curl库访问HTTP下载文件

DS小龙哥

5月月更

【LeetCode】数组中的第K个最大元素Java题解

Albert

LeetCode 5月月更

数据库连接池 -Druid 源码学习(十)

wjchenge

Druid 数据库连接池

明天,龙蜥2位专家直播,第22届计算机系统会议等活动来了!

OpenAnolis小助手

Linux 开源 直播 内核 龙蜥技术

Redis「9」主从、高可用性方案

Samson

redis 学习笔记 5月月更

使用 Provider 实现 Flutter 多组件的状态共享

岛上码农

flutter 安卓开发 ios 开发 跨平台应用 5月月更

Druid 连接池源码阅读 10

石小天

青藤入选信通院“数据安全推进计划”成员单位

青藤云安全

数据安全 信通院

druid 源码阅读 10—— 过一下流程图中的getConnectionDirect

张大彪

Tech Talk 活动回顾|化“被动”为“主动”,如何构建安全合规的智能产品

亚马逊云科技 (Amazon Web Services)

产品 安全 解决方案

数据结构之时间复杂度和空间复杂度

芒果酱

数据结构 算法 5月月更

代码之外:校招该如何准备开发项目

宇宙之一粟

校招 项目开发 5月月更

在线HTML转TSV工具

入门小站

工具

Vite 与 Vue Cli 对比 - 尤雨溪: Vite 会取代 vue-cli 吗?

蒋川

Vue vite vue cli

【中国信通院 x ShardingSphere 金融用户社区】成立,多家知名金融机构正式入驻

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

  • 扫码添加小助手
    领取最新资料包
Amazon全新轻量级服务器端Swift框架:Smoke_开源_Sergio De Simone_InfoQ精选文章