加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在库中包装第三方服务的最佳实践

发布时间:2020-12-17 03:27:24 所属栏目:百科 来源:网络整理
导读:我有兴趣为我正在使用的第三方API编写库,我需要一些建议.在一次请求中,库的平均使用将涉及几个api调用.例如,一个api呼叫从第三方服务中抓取用户,然后另一个呼叫使用该用户抓取他/她的照片.每个API调用都将获得自己的库方法包装器以及处理错误/超时的额外逻辑
我有兴趣为我正在使用的第三方API编写库,我需要一些建议.在一次请求中,库的平均使用将涉及几个api调用.例如,一个api呼叫从第三方服务中抓取用户,然后另一个呼叫使用该用户抓取他/她的照片.每个API调用都将获得自己的库方法包装器以及处理错误/超时的额外逻辑,但我最大的问题是库是应该作为包含状态的单例还是作为一系列类方法.

例如:

user_id = ThirdParty.get_user("abc@gmail.com")
photos = ThirdParty.get_photos(user_id)

要么

thirdpartyservice = ThirdPartyService.new("abc@gmail.com")
photos = thirdpartyservice.get_photos

这些不一定是图书馆的确切设计,但我对每种方法的优缺点感到困惑.任何帮助都会很棒!

顺便说一句,我用的是ruby!

解决方法

我会让库包含状态,因为这会降低用户端代码的复杂性(这就是API应该做的事情,增加简单性).使用这种方法,用户不必跟踪该user_id,因为库保持状态.

如果用户真的想要他们的user_id(或库存储的任何其他数据),您可以在库中创建一个attr_reader来公开该数据.

要为get_photos方法添加fleixiblity,您可以执行以下操作:

class ThirdPartyService

  def get_photos(user_id=@id_stored_in_library)
    # do work
  end

end

这种方式默认为存储的id,但是它增加了灵活性,用户可以选择指定用户ID.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读