想知道这段代码如何变成API

时间:2017-02-14 09:59:29

标签: ruby-on-rails json ruby api

几个星期后,我已经完成了这个Html解析,它接收了一个单词,并将其计入该网址。 ' ruby​​ counter.rb http://abcd.com你好'

class Counter   

    def initialize(url)
      @url = url
    end

    def count(word, url)
      doc = Nokogiri::HTML(open(url))
      doc.css('head').remove
      doc.text.scan(/#{word}/i).size
    end
end

url, word = ARGV
puts "Found: #{Counter.new(url).count(word, url)} matches."

我想知道如何才能将其创建为Rails JSON API。我需要询问:url,:word,:count,所以JSON只需要用url构建,我要求的单词和在其中发现的重复次数。

我完全迷失了,我怎么能这样做,这似乎很容易,但我无法弄清楚。

希望有人帮助我, 感谢。

1 个答案:

答案 0 :(得分:1)

我认为您知道如何创建rails应用程序?假设您已经完成了这项工作,您只需要定义一条路线并将其映射到您的控制器。

namespace :count do 
  namespace :v1 do 
    match 'count_words', to: 'count#count_words', via: :get
  end
end

然后在controllers / count / v1 / count_controller.rb

中定义一个控制器
class Count::V1::CountController < ApplicationController
  def count_words
    # not sure why you're passing URL twice, but hey, whatever
    counter = Counter.new(params[:url]) 
    result = counter.count(params[:url], params[:word]
    render :json => result
  end
end  

您的问题相当模糊,但基本上,我假设您正在从前端(或外部系统)传递某种JSON消息。 Rails会为你处理框架内容,但我所做的就是选择“网址”。和&#39;字&#39;发送了这样的JSON消息:

{
  "url": "www.count.co.uk", 
  "word": "count"
}

然后实例化您的Counter类并将此信息传递给它。然后控制器正在响应包含您的计数器结果的JSON消息。您将要确保您的计数器实际返回哈希结构,但这基本上只需要为简单的API做。

要打这样的话,你可以这样做:

localhost:3000/count/v1/count_words

传递上述JSON消息。

相关问题