集成Rails 4,timekit api,rest-client和Devise

时间:2016-01-30 17:03:40

标签: ruby-on-rails ruby rest curl devise

我是新手Rails 4开发人员,需要一些帮助,使用rest-client为我的简单应用程序添加API。为简化起见,我将仅询问API的身份验证系统。

我有一个简单的应用程序,它使用Devise gem进行身份验证。我希望每个创建帐户的用户都有一个日历用于安排和预订。为了实现这一点,我使用了一个名为timekit(http://timekit.io/)的API。他们的身份验证系统响应以下cURL代码示例:

curl -X POST \ 
   -H 'Timekit-App: docs' \ 
   -d '{
        "email": "doc.brown@timekit.io",
        "password": "DeLorean"
       }' \
  https://api.timekit.io/v2/auth

然后返回以下JSON:

{
"data": {
    "activated": true,
    "email": "doc.brown@timekit.io",
    "first_name": "Dr. Emmett",
    "img": "http://www.gravatar.com/avatar/7a613e5348d63476276935025",
    "last_name": "Brown",
    "last_sync": null,
    "name": "Dr. Emmett Brown",
    "timezone": "America/Los_Angeles",
    "token": "UZpl3v3PTP1PRwqIrU0DSVpbJkNKl5gN",
    "token_generated_at": null,
    "api_token": "FluxCapacitator", // note that this is usually a randomized string and not an actual word
        }
}

所以现在我的问题如下: 1)在Rails框架中我实现了这个吗? 2)如何使用rest-client而不是cURL? 3)如何将其与Devise集成? 4)有什么好的资源可以增强我对我在这里做的事情的理解?

2 个答案:

答案 0 :(得分:2)

很高兴看到你使用Timekit(我是核心开发者之一):)

我们目前没有ruby gem而且我不是Ruby开发人员,但这里有一个快速的代码示例,介绍如何使用HTTParty库完成此任务:

# Global configs for "admin" user
TK_ADMIN_USER = 'my-email@gmail.com'
TK_ADMIN_TOKEN = '12345ABCD'

# Example usage:
# timekit = Timekit.new(TK_ADMIN_USER, TK_ADMIN_TOKEN)
# tk_user = timekit.create_user(account)
# someInternalUser.update(tk_token: tk_user.token)

class Timekit
  include HTTParty
  base_uri 'https://api.timekit.io'
  headers 'Timekit-App' => 'your-app-name'

  def initialize(user, password)
    @auth = {username: user, password: password}
  end

  def create_user(account)
    options = {
      body: {
        "email" => account.email,
        "first_name" => account.first_name,
        "last_name" => account.last_name,
        "timezone" => "America/Los_Angeles"
      }.to_json,
      basic_auth: @auth,
    }
    self.class.post('/v2/users/', options)
  end

  def create_calendar(account)
    options = {
      body: {
        name: "Bookings",
        description: "Hold bookings for clients."
      }.to_json,
      basic_auth: @auth
    }
    self.class.post('/v2/calendars', options)
  end
end

https://gist.github.com/laander/83cb7f5dde1f933173c7

通常,我们的想法是通过我们的API创建用户(您可以在用户注册入门时透明地执行此操作),然后保存API返回的API令牌。之后,您可以执行模拟该用户的API调用(获取日历,创建事件,查询可用性等)

如果您需要更多动手帮助,请在timekit.io上的聊天中写信给我们!

答案 1 :(得分:1)

您可以考虑创建一个小型库,以便在项目的/lib目录中包装与Timekit Web API的交互。我没有看到这个Web API的gem,因此您可以考虑将此逻辑提取为一个,以便社区可以从中受益。

rest-client宝石看起来很容易使用:

 auth_hash = {
  "email" => "doc.brown@timekit.io",
  "password" => "DeLorean"
 }
 RestClient.post "https://api.timekit.io/v2/auth", auth_hash.to_json, content_type: :json, accept: :json

如果要为每个用户创建新的Timekit帐户,您可以考虑将凭据添加到User模型或存储凭据的其他相关模型。