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://:12345/auth/redirect/facebook'

註冊 Twitter 應用程式

使用此連結建立一個新應用程式(您可能需要先登入):https://apps.twitter.com/ 單擊“建立新應用程式”按鈕並填寫所需詳細資訊。單擊“金鑰和訪問令牌”,您將找到您的應用程式金鑰(客戶端 ID)和應用程式金鑰(客戶端金鑰)。將重定向 URI 設定為 'https://: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://:12345/auth/redirect/twitter"
         );
         break;
      case "facebook":
         service = new cloudrail.services.Facebook(
            redirectReceiver,
            "[Facebook Client ID]",
            "[Facebook Client Secret]",
            "https://: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://:12345/auth/start/facebook,您將啟動 Facebook 登入流程。

如果您導航到 https://:12345/auth/start/twitter,您將啟動 Twitter 登入流程。

使用服務登入並授予訪問許可權後,如果您第一次這樣做,您將看到“歡迎新手!”,在後續訪問中將看到“歡迎回來 [您的姓名]”。

要將其整合到實際網站中,例如,您可以在其中包含服務提供商的徽標,並將徽標連結到相應的 URL。

此外,偽資料庫應替換為真實的資料庫。就是這樣,最多 9 個不同提供商的社交登入!

廣告
© . All rights reserved.