Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在多个web服务上创建抽象api_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 在多个web服务上创建抽象api

Ruby on rails 在多个web服务上创建抽象api,ruby-on-rails,ruby,Ruby On Rails,Ruby,我来自c#/.net/asp.net mvc/nancyfx,我正在考虑将Rails用于一个即将到来的项目 该项目涉及到创建一个统一/抽象api,该api将两个类似的web服务拉到一起,允许开发人员提供每个服务的实现,同时也通过单个api与它们交互。就像Ruby DBI对数据库所做的那样 在c#中,我将创建一个接口来定义所有服务实现必须遵守的契约(我使用在线文件存储服务作为示例来解释这个问题): 公共接口提供程序 { i收集列表文件名(字符串文件夹); } 然后,我将为每个服务创建实现,例如d

我来自c#/.net/asp.net mvc/nancyfx,我正在考虑将Rails用于一个即将到来的项目

该项目涉及到创建一个统一/抽象api,该api将两个类似的web服务拉到一起,允许开发人员提供每个服务的实现,同时也通过单个api与它们交互。就像Ruby DBI对数据库所做的那样

在c#中,我将创建一个接口来定义所有服务实现必须遵守的契约(我使用在线文件存储服务作为示例来解释这个问题):

公共接口提供程序
{
i收集列表文件名(字符串文件夹);
}
然后,我将为每个服务创建实现,例如dropbox:

public DropboxStorageProvider : IStorageProvider
{
    public ICollection<string> ListFilenames(string folder)
    {
        var filenames = service.SomeCodeToGetFilenames(folder);
        return filenames;
    }
}
公共DropboxStorageProvider:IStorageProvider
{
公用ICollection列表文件名(字符串文件夹)
{
var filenames=service.SomeCodeToGetFilenames(文件夹);
返回文件名;
}
}

创建这种抽象的Ruby方法是什么?谢谢

据我所知,Ruby中没有接口,在C#、Java、Objective-C或Swift等静态类型语言中使用。在Ruby中,不能用一组属性和方法声明抽象实体。也不能强迫Ruby类符合这种抽象实体。相反,在Ruby中,人们通常编写单元测试以确保类的行为符合预期。所以Ruby中的单元测试有点像接口,它记录了类(方法和属性)的端点,并确保这些端点工作

这是我在为iOS应用程序构建用RubyonRails编写的API时的工作流程

  • 我通常做的第一件事是为这个API编写文档。例如,文档是用友好的语言编写的,托管在Github wiki中。对于每个HTTP端点,我记录其请求URL和方法、参数及其类型,并提供一些发送和接收JSON数据的示例

  • 接下来,我开始使用TDD方法在RubyonRails中开发这个API,在这里,我首先根据刚刚编写的文档编写一个单元测试

  • 最后,我编写应用程序逻辑,确保测试通过

  • 在客户端(在我的例子中是iOS应用程序),我还编写了集成测试,以确保应用程序与服务器API协调工作

  • 见以下问题:


    谢谢!我了解到ruby没有任何类似于接口的特性,我也不是在寻找“接口的ruby实现”。我正在为我的案例寻找最佳实践,ruby wise。有什么建议吗?:-)感谢您使用工作流程更新您的答案。所以,我的假设正确吗?因为Ruby是duck类型的,所以只要用完全相同的方法和属性创建类,我就可以做与在c#中使用接口时相同的事情。是的,您可以用ListFilenames方法创建两个类。然后,您将实例化这些类中的对象并调用ListFileName。
    public DropboxStorageProvider : IStorageProvider
    {
        public ICollection<string> ListFilenames(string folder)
        {
            var filenames = service.SomeCodeToGetFilenames(folder);
            return filenames;
        }
    }