gpt4 book ai didi

ruby - Sinatra 应用程序的扩展

转载 作者:数据小太阳 更新时间:2023-10-29 08:52:19 24 4
gpt4 key购买 nike

我在 Sinatra 中有一个简单的服务器,比如

require 'sinatra/base'

class Server < Sinatra::Base

get '/' do
"root"
end

get '/api/:apiname' do
"return api from module #{params.apiname}"
end

end

我希望能够为每个可以使用 Sinatra DSL 的 api 包含模块。它可能是这样的:

module SomeApi
get '/api_method'
"result of api call"
end
end

然后我想将 SomeApi 模块包含到我的 Server 类中,以便能够从 url "http://localhost/someapi/api_method"获取 api 调用结果.是否可以更改我的代码以执行此操作,或者我应该使用 Sinatra 之外的其他框架?非常感谢!

最佳答案

也许您会发现 Rack 中的 map 方法很有用。有了它,您可以执行以下操作:

配置.ru:

require 'sinatra/base'
require './app'

map('/api1'){ run API1 }
map('/api2'){ run API2 }
map('/'){ run Server }

应用.rb:

class Server < Sinatra::Base
get '/' do
"root"
end

get '/foo' do
"foo from Server"
end
end

class API1 < Sinatra::Base
get '/foo' do
"foo from API1"
end
end

class API2 < Sinatra::Base
get '/foo' do
"foo from API2"
end
end

启动服务器:

$ thin start
>> Using rack adapter
>> Thin web server (v1.3.1 codename Triple Espresso)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop

测试一下:

$ curl localhost:3000
root%
$ curl localhost:3000/foo
foo from Server%
$ curl localhost:3000/api1/foo
foo from API1%
$ curl localhost:3000/api2/foo
foo from API2%

关于ruby - Sinatra 应用程序的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com