ruby sinatra 内部机制(一)

下面讨论的问题是,ruby sinatra是如何和服务器进行交互的。

sinatra参照的规范是rack,rack指定了一个http 服务器如何和一个app(在sinatra中,即Sinatra::Application)进行交互。

rack协议的核心指明了一个app(在rack中称为endpoint)必须能够响应call方法的调用。而server(通常称为handler),则向这个方法传参,调用这个方法。而所传递的参数则是一个hash,其中包含了一个request的相关信息:这个请求所用的http方法,请求的path,请求头等。这个方法的预期返回是包含三个元素的数组:第一个是状态码,第二个是包含响应头信息的hash,第三个是响应体。

 

参照这个核心协议我们可以开发我们自己的sinatra。

module MySinatra
  class Application
  def self.call(env)
      new.call(env)
    end
    def call(env)
      headers = {'Content-Type' => 'text/html'}
      if env['PATH_INFO'] == '/'
        status, body = 200, 'hi'
      else
        status, body = 404, "Sinatra doesn't know this ditty!"
      end
      headers['Content-Length'] = body.length.to_s
      [status, headers, [body]]
    end
  end
end
require 'thin'
Thin::Server.start MySinatra::Application, 1234
 启动后,我们访问1234端口,可以得到“hi”。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
当然,下面是一个简单的Ruby接口案例: ```ruby require 'sinatra' # GET请求的接口 get '/api/hello' do content_type :json { message: 'Hello, World!' }.to_json end # POST请求的接口 post '/api/greet' do content_type :json name = params[:name] { message: "Hello, #{name}!" }.to_json end # PUT请求的接口 put '/api/update/:id' do content_type :json id = params[:id] # 执行更新操作... { message: "Record with ID #{id} has been updated." }.to_json end # DELETE请求的接口 delete '/api/delete/:id' do content_type :json id = params[:id] # 执行删除操作... { message: "Record with ID #{id} has been deleted." }.to_json end ``` 上述例子使用了Sinatra框架,它是一个轻量级的Ruby Web框架,适合快速搭建简单的接口。在上面的代码中,我们定义了四个不同的路由,分别对应不同的HTTP请求方法(GET、POST、PUT、DELETE)。 对于GET请求的`/api/hello`接口,它返回一个JSON格式的响应,包含一条简单的问候消息。 对于POST请求的`/api/greet`接口,它从请求参数中获取名字,并返回一个包含问候消息的JSON响应。 对于PUT请求的`/api/update/:id`接口,它从URL参数中获取ID,并执行相应的更新操作,然后返回一个JSON响应。 对于DELETE请求的`/api/delete/:id`接口,它从URL参数中获取ID,并执行相应的删除操作,然后返回一个JSON响应。 以上只是一个简单的示例,实际的接口可能涉及更复杂的逻辑和数据处理。但这个例子可以帮助你了解如何使用Ruby构建一个简单的接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值