发布于 2026-01-06 0 阅读
0

Web Monetization API 的 Rack 中间件

Web Monetization API 的 Rack 中间件

最初,我不知道我是否能以合适的方式参与这次开发者黑客马拉松,因为 Web Monetization API 主要是一个客户端主题,而作为一名后端开发人员,我并不清楚我的贡献点在哪里。

然而,后来我看到 DEV 社区成员 Kinyanjui Wangonya 提出了为 Web Monetization API 创建 Python 绑定的想法,我顿时灵感迸发!

是时候为 Ruby 生态系统构建中间件,以处理 API 返回的不同状态了。

我建造的

我构建了 Rack 中间件,rack-monetize它既可以在独立的 Ruby 应用程序中使用,也可以挂载到 Rails 应用程序中。

该中间件的功能与其他中间件类似,它位于堆栈的中间,并监视进入应用程序的请求参数。

当中间件检测到与 Web 货币化 API 相关的参数时,它会拦截并处理这些参数。如果参数的数据值与API 文档中记录的某种状态匹配,则允许数据继续向下传递到应用程序的底层。但是,如果数据不属于预期状态,则会停止应用程序的流程并返回403HTTP 状态码。

每个 Ruby 开发人员都可以为他们集成 Web 货币化 API 的每个应用程序构建此功能,但中间件为他们抽象了该过程,使其变得像在 Railsuse Rack::Monetize::ProcessMonetizeStateconfig.ru或Rails 文件config.middleware.use Rack::Monetize::ProcessMonetizeState中包含一样简单config/application.rb

该 gem 已发布在RubyGems上,代码已发布在 GitHub 上:

GitHub 标志 hummusonrails /机架货币化

Rack Web Monetization Middleware

提交类别:

基础技术

演示

该应用程序(v0.1.0)可在RubyGems上找到

客户端应用程序需要将 Web Monetization API 的状态发送到已rack-monetize安装该 API 的后端。发送状态时需要使用密钥monetization_state

代码链接

GitHub 标志 hummusonrails /机架货币化

Rack Web Monetization Middleware

我是如何搭建它的

我首先利用 bundler 中的新 gem 功能构建了它:

$ bundle gem rack-monetize
Enter fullscreen mode Exit fullscreen mode

这会触发一系列问题提示,我都一一作答。这些问题涉及驾照、行为准则等等。

完成上述步骤后,我填写了rack-monetize.gemspec用于构建 gem 的详细信息,并将其添加rack为运行时依赖项:

spec.add_runtime_dependency('rack', '~> 2.2', '>= 2.2.2')
Enter fullscreen mode Exit fullscreen mode

那时,我已经准备好编写代码本身了,它位于内部/lib/rack/monetize/process_monetize_state.rb

ProcessMonetizeState#initialize方法接受应用程序作为参数,并将其赋值给实例变量,@app以便在其余代码中使用它。

如果未包含,#call方法会将return环境返回到堆栈paramsmonetization_state

如果params包含monetization_state它,则会调用该#check_monetization_state方法。

该方法返回true状态是否为以下之一:stopped、、。(根据API 文档,pending功能将一直存在,直到浏览器内置 Web 货币化功能。)startedundefined undefined

403如果存在monetization_state参数,但其值不是上述状态之一,则中间件将返回HTTP 状态。

文章来源:https://dev.to/bengreenberg/rack-middleware-for-the-web-monetization-api-1ah9