【问题标题】:Wondering how this code could turn into an API想知道这段代码如何变成 API
【发布时间】:2017-02-14 09:59:28
【问题描述】:

几周后,我完成了这个 Html 解析,它接收一个单词并在该 url 中计算它。 '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、我问的单词和其中的重复次数来构建。

我完全不知道该怎么做,这似乎很容易,但我就是想不通。

希望有人帮助我, 谢谢。

【问题讨论】:

标签: ruby-on-rails json ruby api


【解决方案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 会为您处理框架性的东西,但我所做的只是挑选出在 JSON 消息中发送的“url”和“word”,如下所示:

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

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

要调用这样的东西,你会这样做:

localhost:3000/count/v1/count_words

传递上述 JSON 消息。

【讨论】:

  • 我想要类似的东西: curl localhost:3000/v1/counter -d {"url":"example.com"; "word":"TestTing"},然后它返回一个带有 url 的 JSON,我问的单词以及 url 中有多少单词
  • 是的,我的回答会这样做。关键是路由和 API 资源的控制器。它基本上所做的就是把你的 {"url":"example.com";; "word":"TestTing"} 并将其传递给您的计数器类,将结果作为 JSON 响应传递回请求者。您需要在 URL 中指定一个操作。在我的示例中,操作是“count_words”,但这可以在路由文件中进行配置:app/config/route.rb 如果您设置类似于我概述的内容,您的命令将是:localhost:3000/count /v1/count_words -d {"url":"example.com", "word":"TestTing"}
  • 哦,谢谢!我会看看这个。感谢帮助
  • 没问题 - 如果我成功了,别忘了将此标记为有用/回答问题 =)
猜你喜欢
  • 2019-11-09
  • 1970-01-01
  • 2019-11-27
  • 2013-01-18
  • 2017-08-04
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 2021-10-11
相关资源
最近更新 更多