Cloudrail 快速指南



Cloudrail - 概述

CloudRail 是一款 API 集成解决方案,可加快将第三方 API 集成到应用程序并维护它们的过程。它通过为多个平台提供包含抽象层的库来实现此目的,这些抽象层将类似的服务组合在公共接口之后。

CloudRail - 功能

以下是 CloudRail 一些最突出的功能列表:

  • 统一 API - CloudRail 将多个 Web API 捆绑到单个统一 API 中。例如,函数 upload() 对 Dropbox 的作用与对 Google Drive 的作用完全相同。您可以轻松集成整类提供商(例如社交登录),或通过一行代码更改提供商。

  • API 变更管理 - API 始终在变化,导致集成中断、客户不满意,甚至浪费更多开发时间。CloudRail 监控所有 API 并维护集成。您可以立即收到有关更改的通知,您只需将 CloudRail 库更新到最新版本即可 - 无需更改代码。

  • API 统计信息 - 了解您的客户最常使用哪些 API 和功能。获得所需的洞察力,以识别新功能或改进营销活动。

  • 直接数据 - 您的任何数据都不会通过 CloudRail 服务器。该系统不使用托管中间件。所有数据转换都发生在集成到您的应用程序中的 CloudRail 库中。这意味着没有数据隐私问题,没有停机时间,也没有额外的单点故障 (SPOF)。

  • OAuth 简化 - 进行 OAuth 身份验证很麻烦。CloudRail 使授权变得像添加一行代码一样简单。

CloudRail 的免费版本仅可用于非商业用途或测试。商业用户必须购买许可证。

Cloudrail - Android

本节介绍如何使用 CloudRail 的 Android SDK。

设置

最简单的安装方法是通过 Maven。如果您使用的是带有 Gradle 的 Android Studio,只需将以下内容添加到您的 build.gradle 文件中:

dependencies {
   compile 'com.cloudrail:cloudrail-si-android:2.8.1
}

用法

以下示例演示如何创建一个新文件夹并将文件从 Android 应用程序的资源上传到任何云存储提供商上的新创建文件夹中。

java
CloudRail.setAppKey("[CloudRail License Key]");

// CloudStorage cs = new Box(context, "[clientIdentifier]", "[clientSecret]");
// CloudStorage cs = new OneDrive(context, "[clientIdentifier]", "[clientSecret]");
// CloudStorage cs = new GoogleDrive(context, "[clientIdentifier]", "[clientSecret]");
CloudStorage cs = new Dropbox(context, "[clientIdentifier]", "[clientSecret]");

new Thread() {
   @Override
   public void run() {
      cs.createFolder("/TestFolder"); // <---
      InputStream stream = null;
      
      try {
         AssetManager assetManager = getAssets();
         stream = assetManager.open("UserData.csv");
         long size = assetManager.openFd("UserData.csv").getLength();
         cs.upload("/TestFolder/Data.csv", stream, size, false); // <---
      } catch (Exception e) {
         // TODO: handle error
      } finally {
         // TODO: close stream
      }
   }
}.start();

Cloudrail - Java

本节介绍如何使用 CloudRail 的 Java SDK。

设置

最简单的安装方法是通过 Maven。只需将以下内容添加到您的 pom.xml 文件中:

<dependencies>
   <dependency>
      <groupId>com.cloudrail</groupId>
      <artifactId>cloudrail-si-java</artifactId>
      <version>2.8.0</version>
   </dependency>
</dependencies>

用法

以下示例演示如何创建一个新文件夹并将文件从本地计算机上传到任何云存储提供商上的新创建文件夹中。

java
CloudRail.setAppKey("[CloudRail License Key]");

// CloudStorage cs = new Box(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// CloudStorage cs = new OneDrive(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// CloudStorage cs = new GoogleDrive(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
CloudStorage cs = new Dropbox(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
new Thread() {
   @Override
   public void run() {
      cs.createFolder("/TestFolder");
      InputStream stream = null;
      
      try {
         stream = getClass().getResourceAsStream("Data.csv");
         long size = new File(getClass().getResource("Data.csv").toURI()).length();
         cs.upload("/TestFolder/Data.csv", stream, size, false);
      } catch (Exception e) {
         // TODO: handle error
      } finally {
         // TODO: close stream
      }
   }
}.start();

Cloudrail - Node.js

本节介绍如何使用 CloudRail 的 Node.js SDK。

设置

最简单的安装方法是通过 NPM。只需使用以下命令:

npm install cloudrail-si

用法

以下示例演示如何创建一个新文件夹并将文件从本地计算机上传到任何云存储提供商上的新创建文件夹中。

javascript
const cloudrail = require("cloudrail-si");
cloudrail.Settings.setKey("[CloudRail License Key]");

// let cs = new cloudrail.services.Box(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// let cs = new cloudrail.services.OneDrive(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// let cs = new cloudrail.services.GoogleDrive(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
let cs = new cloudrail.services.Dropbox(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");

cs.createFolder("/TestFolder", (err) => { // <---
   if (err) throw err;
   let fileStream = fs.createReadStream("UserData.csv");
   let size = fs.statSync("UserData.csv").size;
   
   cs.upload("/TestFolder/Data.csv", fileStream, size, false, (err) => { // <---
      if (err) throw err;
      console.log("Upload successfully finished");
   });
});

Cloudrail - IOS

本节介绍如何使用 CloudRail 的 iOS SDK。

设置

最简单的安装方法是通过 CocoaPods。只需将以下内容添加到您的 podfile 中:

pod "cloudrail-si-ios-sdk"

确保已设置“use_frameworks!”标志并运行

Pod install

用法

以下示例演示如何在 Objective-C 和 Swift 中从任何云存储提供商下载文件。

objective-c
// self.service = [[CROneDrive alloc] initWithClientId:@"clientIdentifier" clientSecret:@"clientSecret" redirectUri:@"REDIRURL" state:@"CRSTATE"];
// self.service = [[CRGoogleDrive alloc] initWithClientId:@"clientIdentifier" clientSecret:@"clientSecret" redirectUri:@"REDIRURL" state:@"CRSTATE"];
// self.service = [[CRBox alloc] initWithClientId:@"clientIdentifier" clientSecret:@"clientSecret" redirectUri:@"REDIRURL" state:@"CRSTATE"];

[CRCloudRail setAppKey:@"CLOUDRAIL_API_KEY"];
self.service = [[CRDropbox alloc] initWithClientId:@"clientIdentifier" 
   clientSecret:@"clientSecret" redirectUri:@"REDIRURL" state:@"CRSTATE"];

NSInputStream * object = [self.service downloadFileWithPath:@"/mudkip.jpg"];
//READ FROM STREAM

swift
//let cloudStorage : CloudStorageProtocol = Box.init(clientId: "ClientID", clientSecret: "ClientSecret")
//let cloudStorage : CloudStorageProtocol = GoogleDrive.init(clientId: "ClientID", clientSecret: "ClientSecret")
//let cloudStorage : CloudStorageProtocol = OneDrive.init(clientId: "ClientID", clientSecret: "ClientSecret")

CRCloudRail.setAppKey("CLOUDRAIL_API_KEY")
let cloudStorage : CloudStorageProtocol = Dropbox.init(
   clientId: "ClientID", clientSecret: "ClientSecret")
do {
   let inputStream = try cloudStorage.downloadFileWithPath("/TestFolder/Data.csv")
} catch let error{
   print("An error: \(error)")
}
//READ FROM STREAM

Cloudrail - 社交登录

本节介绍为(Web)应用程序实现社交登录的用例。本章仅概述社交登录,在后续章节中,我们将演示如何为 Facebook 和 Twitter 设置它,但添加更多服务(如 Google Plus、LinkedIn、GitHub、Instagram、Slack、Windows Live 和 Yahoo)非常容易。我们将在服务器端使用 Node.js 与 Express。

为什么选择社交登录?

软件开发人员和架构师向其前端添加后端的最常见原因之一是需要用户管理。为了使用户管理能够工作,注册和登录功能是关键。过去,大多数应用程序都有自己的身份验证系统,因此每个用户都需要通过提供电子邮件地址、密码和其他信息来主动创建帐户。

这不仅对用户来说很麻烦,而且也臭名昭著地不安全。许多用户会在各个地方使用相同的密码,这被称为密码疲劳,并且每个拥有密码存储的方都增加了被盗的可能性。

最近,越来越多的服务提供“社交登录”(“使用 Facebook 登录”、“使用 GitHub 登录”等),通过允许用户使用其在流行平台上已有的帐户进行注册/登录来改善用户体验。

Cloudrail - 设置

注册 CloudRail 应用程序

使用此链接创建一个新应用程序(您可能需要先登录):https://developers.cloudrail.com 您可以在应用程序摘要中找到您的 CloudRail 许可证密钥。

注册 Facebook 应用程序

使用此链接创建一个新应用程序(您可能需要先登录):https://developers.facebook.com/apps/。然后单击“添加新应用程序”按钮,选择“基本设置”并创建一个新应用程序。在仪表板部分,您可以找到您的应用程序密钥(客户端 ID)和应用程序密钥(客户端密钥)。

转到“添加产品”并选择“Facebook 登录”。将重定向 URI 设置为 'https://127.0.0.1:12345/auth/redirect/facebook'

注册 Twitter 应用程序

使用此链接创建一个新应用程序(您可能需要先登录):https://apps.twitter.com/ 单击“创建新应用程序”按钮并填写所需详细信息。单击“密钥和访问令牌”,您将找到您的应用程序密钥(客户端 ID)和应用程序密钥(客户端密钥)。将重定向 URI 设置为 'https://127.0.0.1:12345/auth/redirect/twitter'

初始化一个新的 Node.js 项目

确保您已安装 Node.js,创建一个新文件夹,初始化 package.json 并通过在控制台中发出以下命令(或非 Unix OS 上的等效命令)来安装 ExpressCloudRail

mkdir myProject
cd myProject
npm init
npm i --save express cloudrail-si

Cloudrail - 编码

在创建的文件夹中为您的服务器代码创建一个新文件,并添加以下内容以导入和设置 ExpressCloudRail

javascript
const express = require("express");
const cloudrail = require("cloudrail-si");
const app = express();
cloudrail.Settings.setKey("[CloudRail license key]");

现在,我们继续编写一个函数,该函数将实例化我们要用于社交登录的服务:

javascript
function makeService(name, redirectReceiver) {
   let service;
   switch (name) {
      case "twitter":
         service = new cloudrail.services.Twitter(
            redirectReceiver,
            "[Twitter Client ID]",
            "[Twitter Client Secret]",
            "https://127.0.0.1:12345/auth/redirect/twitter"
         );
         break;
      case "facebook":
         service = new cloudrail.services.Facebook(
            redirectReceiver,
            "[Facebook Client ID]",
            "[Facebook Client Secret]",
            "https://127.0.0.1:12345/auth/redirect/facebook",
            "state"
         );
         break;
      // More services from the Profile interface can be added here, 
      //the services above are just examples
      default: throw new Error("Unrecognized service");
   }
   return service;
}

我们需要一种跟踪用户身份的方法。这通常在数据库中完成,但为了使本教程简短,我们将使用充当伪数据库的对象。

其所有数据都保存在内存中,因此在服务器重新启动时会丢失:

javascript
const users = {
   records: {}
};
users.find = (id) ⇒ {
   return users.records[id];
};
users.save = (id, data) ⇒ {
   users.records[id] = data;
};

之后,我们注册将处理社交登录流程启动的服务器端点:

javascript
app.get("/auth/start/:serviceName", (req, res) ⇒ {
   let serviceName = req.params["serviceName"];
   
   let redirectReceiver = (url, state, callback) ⇒ {
      res.redirect(url);
   };
   let service = makeService(serviceName, redirectReceiver);
   service.login();
});

我们启动社交登录的服务将重定向到我们的服务器,我们需要处理此重定向。

获取用户的唯一标识符后,我们检查我们之前是否见过此用户。如果是,则我们用他的名字问候他。如果不是,我们从社交网络获取姓名并保存新用户:

javascript
app.get("/auth/redirect/:serviceName", (req, res) ⇒ {
   let serviceName = req.params["serviceName"];
   
   let redirectReceiver = (url, state, callback) ⇒ {
      callback(undefined, "http://bla.com" + req.url); 
      // The callback expects a complete URL but only the query matters
   };
	let service = makeService(serviceName, redirectReceiver);
   service.getIdentifier((err, identifier) ⇒ {
      if (err) res.status(500).send(err);
      let user = users.find(identifier);
      
      if (user) {
         res.send("Welcome back " + user.name);
      } else {
         service.getFullName((err, name) ⇒ {
            if (err) res.status(500).send(err);
            users.save(identifier, {
               name: name
            });
            res.send("Welcome greenhorn!");
         });
      }
   });
});

最后,我们让服务器监听端口 12345:

javascript
app.listen(12345);

我们现在可以启动应用程序并在本地浏览器中测试它。

如果您导航到 https://127.0.0.1:12345/auth/start/facebook,您将启动 Facebook 登录流程。

如果您导航到 https://127.0.0.1:12345/auth/start/twitter,您将启动 Twitter 登录流程。

使用服务登录并授予访问权限后,如果您第一次这样做,您将看到“欢迎新手!”,在后续访问中将看到“欢迎回来 [您的姓名]”。

要将其集成到实际网站中,例如,您可以在其中包含服务提供商的徽标,并将徽标链接到相应的 URL。

此外,伪数据库应替换为真实的数据库。就是这样,最多 9 个不同提供商的社交登录!

广告