`

ruby设置一个灵活api架构的思路

    博客分类:
  • RUBY
阅读更多
API定义也许很简单,但是要做到可扩展性强,调用简单统一,还是要花一些心思。
下面总结一下ruby设置一个灵活api架构的思路和样例:
需求:整合["Google", "Yahoo", "Baidu"]等的接口调用。
思路:
一:最外层定义一个api.rb类型请求转发模块Test::Api,按照searche_type字段属性的请求类型定向到对应的api请求文件包。(如Test::Api::BaiduApi)

class Searcher < ActiveRecord::Base
	include Test::Api
end


module Test
  module Api
    def api
      unless @api
        se_type = self.searche_type
        if ["Google", "Yahoo", "Baidu"].include?(se_type)
          klass = "Test::Api::#{self.searche_type}Api::Api".constantize
        else
          klass = nil
        end
        @api = klass.new(self)
      end
      @api
    end
  end
end


二:在如Test::Api::BaiduApi文件包内定义api.rb来响应对应的请求分发。
module Test
  module Api
    module BaiduApi
      class Api
        def service(name)
          unless @services[name]
              klass = "Test::Api::BaiduApi::#{name}Service".constantize
              @services[name] = klass.new(self, @search_engine)
          end
          return @services[name]
        end
 end end end end


三:在如Test::Api::BaiduApi文件包内定义keword_service.rb类来响应具体KeywordService的方法事件请求处理。(同理还可以定义campaign_service.rb等)
module Test
  module Api
    module BaiduApi
      class KeywordService 
        def download_report(campaign_ids, start_date, end_date)
          path = download_report_base(:Placement1, campaign_ids, start_date, end_date)
          return import_reports(path)
        end
 end end end end


调用示例:
se=Searcher.find(1)
#其中se.searche_type="Baidu"
srve="keword"
row_count = se.api.service(srvc).download_report(campaign_ids, nil, start_date, end_date)

总结:由于不同api的实际实现逻辑不一样,所以为实现可扩展性,在设计上将各个api的业务逻辑分开管理,但是在调用接口处理上,实现了统一调度。
0
0
分享到:
评论

相关推荐

    Ruby API 帮助文档

    Ruby API 帮助文档Ruby API 帮助文档Ruby API 帮助文档Ruby API 帮助文档Ruby API 帮助文档Ruby API 帮助文档Ruby API 帮助文档Ruby API 帮助文档Ruby API 帮助文档

    Ruby-FastJSONAPI一个用于Ruby对象的快速JSONAPI的序列化器

    Ruby FastJSONAPI 是一个专为Ruby对象设计的高性能JSON:API序列化库。它旨在帮助开发者以简洁、高效的方式将Ruby对象转换为符合JSON:API规范的JSON格式,极大地提高了开发效率和应用程序的性能。 JSON:API是一个...

    ruby中英文api

    Rails框架是Ruby的一个重要应用,它是一个基于MVC(模型-视图-控制器)架构的Web开发框架,简化了Web应用的开发过程。学习Rails API,需要了解路由、控制器、模型、视图、ActiveRecord ORM(对象关系映射)以及Rails...

    Sketch Up Ruby API by Sugar.pdf

    Sketch Up Ruby API by Sugar 是一份关于 SketchUp 的 Ruby API 文档,用于帮助开发者使用 Ruby 语言开发 SketchUp 插件和应用程序。该文档提供了详细的 API 参考手册,涵盖了 SketchUp 的各个方面,包括应用程序...

    Ruby-JSONAPIResources提供了一个框架来开发一个符合JSONAPI规范的服务器

    Ruby-JSONAPIResources 是一个基于 Ruby 的框架,专门用于构建遵循 JSON API 规范的服务器端应用。JSON API 是一种标准化的数据交换格式,它旨在提高客户端与服务器之间的数据交互效率和可读性,广泛应用于RESTful ...

    ruby 最新 安装文件 与 API

    例如,"rubyinstaller-1.8.6-p398.exe"就是Ruby的一个旧版本安装包,尽管这里的版本较老(1.8.6-p398),它通常包含了运行Ruby所需的全部组件,包括解释器、标准库和其他必要的工具。 描述中的"智能API"可能指的是...

    jira-ruby, 用于 JIRA REST API的ruby gem.zip

    jira-ruby, 用于 JIRA REST API的ruby gem gem API 这里 gem 提供对 Atlassian REST API的访问。松弛加入我们的Slack 你可以在这里找到我们。示例用法require 'rubygems'require 'jira-ruby

    Ruby-使用百度地图API进行地址定位坐标坐标定位地址名称定位地址

    接下来,让我们安装`baidu_geocoder`库,这是一个方便的Ruby gem,可以帮助我们与百度地图API进行交互。你可以通过运行以下命令安装: ```ruby gem install baidu_geocoder ``` `baidu_geocoder`库提供了简单的...

    ruby api html

    Ruby 1.8.6 是 Ruby 的一个旧版本,发布于2009年。在那个时期,Ruby 社区正在快速发展,许多流行框架如 Ruby on Rails 正在崛起。这个版本的 API 文档对于仍在使用或研究老版本 Ruby 的开发者来说尤其重要,因为它...

    ruby API资料

    - **面向对象编程**:Ruby是完全的面向对象语言,每个数据都是一个对象,每个操作都是方法调用。理解`Class`和`Module`如何工作,以及如何定义和继承类,是掌握Ruby的关键。 - **元编程**:Ruby允许在运行时动态...

    Ruby-DevDocs一个API文档浏览器

    Ruby-DevDocs是一个高效且用户友好的API文档浏览器,专为开发者设计,旨在提供一个集中的平台,方便他们查阅各种编程语言和框架的文档。这个工具整合了多种API文档,使其能够在快速、有序且可搜索的界面上进行访问。...

    ruby on rails api

    描述中的“方便查阅”意味着这个CHM文件可能是一个组织良好的Rails API参考手册,便于开发者快速查找和理解Rails的各种API用法。 在Rails中,一些关键的API知识点包括: 1. **ActiveRecord**:这是Rails的核心组件...

    Ruby API Docs帮助文档

    Ruby API Docs是针对Ruby编程语言的一份详尽的官方文档,它为开发者提供了关于Ruby标准库和核心类库的详细信息。这份文档包含了1.8.7和1.9.2两个版本,这两个版本在Ruby的发展历程中具有重要的地位。Ruby API Docs...

    Ruby on Rails4 api.chm

    Ruby on Rails4 api.chm ruby on rails 4 最新api chm版本,方便大家阅览!

    Ruby API 帮助文档.zip

    2. **类与对象**: Ruby中的所有事物都是对象,每个对象都属于一个类。类是创建对象的蓝图,包含数据(实例变量)和行为(方法)。继承机制允许一个类从另一个类派生,从而复用并扩展已有功能。 3. **块、 Proc 和 ...

    Ruby-Crpe一个轻量级的API框架旨在帮助您编写干净快速web服务在Ruby中

    总的来说,Ruby-Crêpe是一个为API开发定制的框架,它在保持代码简洁的同时,提供了足够的灵活性和功能,是小型到中型API项目的理想选择。通过深入理解和实践,你可以利用Crêpe的强大功能,构建出高效、优雅的web...

    【sketchup开发必备】RUBY API for sketchup (狂刀整理版).CHM

    是 sketchup(草图大师)的ruby接口,提供su的对象、方法、属性。 是本人从su帮助的网上链接下载整理成chm的。

    ruby的API文档,有需要同事请下载

    Ruby 1.9.3是其历史上的一个重要版本,此版本引入了许多改进和新特性。 1. **Ruby的基础概念** - 类与对象:Ruby是纯面向对象的语言,一切皆为对象。每个变量都是一个对象,包括基本数据类型如整数、字符串和布尔...

    javascript apis ruby api

    Ruby中类似Struts的框架是Ruby on Rails,它是一个MVC(Model-View-Controller)架构,提供了强大的路由、自动化测试和数据库交互能力。Ruby的man页面(如ruby-man-1.CHM)通常包含语言的命令行参考和库函数文档,是...

    Ruby-云片短息ruby服务器端api

    总之,"云片短息Ruby服务器端API"是一个方便的工具,它让Ruby开发者能轻松地在服务器端集成短信服务,实现诸如验证码发送、用户通知等功能。通过理解和熟练使用这个API,你可以提升应用的功能性和用户体验。

Global site tag (gtag.js) - Google Analytics