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::ProcessMonetizeState中config.ru或Rails 文件config.middleware.use Rack::Monetize::ProcessMonetizeState中包含一样简单config/application.rb。
该 gem 已发布在RubyGems上,代码已发布在 GitHub 上:
hummusonrails /机架货币化
Rack Web Monetization Middleware
提交类别:
基础技术
演示
客户端应用程序需要将 Web Monetization API 的状态发送到已rack-monetize安装该 API 的后端。发送状态时需要使用密钥monetization_state。
代码链接
hummusonrails /机架货币化
Rack Web Monetization Middleware
我是如何搭建它的
我首先利用 bundler 中的新 gem 功能构建了它:
$ bundle gem rack-monetize
这会触发一系列问题提示,我都一一作答。这些问题涉及驾照、行为准则等等。
完成上述步骤后,我填写了rack-monetize.gemspec用于构建 gem 的详细信息,并将其添加rack为运行时依赖项:
spec.add_runtime_dependency('rack', '~> 2.2', '>= 2.2.2')
那时,我已经准备好编写代码本身了,它位于内部/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 状态。