2012-02-26 80 views
7

我對完整的架構想法有不同的疑問。我希望有經驗豐富的人能夠幫助我,因爲我幾乎陷入了所有的可能性。API作爲網站和移動應用程序的核心

我打算重寫一個社區網站。我們的客戶希望在未來使用原生移動應用程序。所以我需要考慮這一點。正因爲如此,我決定創建一個基於PHP框架Kohana的100%REST API體系結構。我選擇了Kohana,因爲這樣可以非常輕鬆地將內部API擴展到其他服務器,而無需額外的工作。 (Kohana威脅內部URL請求不是HTTP,因此開始時沒有太多開銷,並且可以通過一些小的代碼更改擴展到HTTP)。

起初,API將是私有的,但稍後我們可能會公開讓更多服務輕鬆連接到我們。

德基本REST結構如下:

  1. /貓
  2. /貓/ 1
  3. /貓/ 1 /自定義

'自定義' 可以是 '孩子的'例如。

同樣適用於:

  1. /廣告
  2. /投標
  3. /用戶
  4. /橫幅
  5. 等。

這些是API完美的實體因爲移動應用程序肯定會使用所有這些功能。

所以我們可以總結出網站的核心是REST。所以基本上我想將網站作爲API的客戶端,就像將來的本地應用程序一樣。這樣維護似乎更容易。

我擔心的是,除此之外還有很多事情(管理上傳的文件,發票,發票的自動郵件,廣告的自動郵件等等)。上傳文件需要通過網站到達API。這是常見的做法嗎?如果我不這樣做,該網站將做上傳邏輯,這使得該網站不再是客戶端和應用程序本身。因此,移動應用程序甚至無法上傳,API和網站都需要知道上傳文件夾(重複邏輯)。

我想創建以下模塊:

  1. 社區API
  2. 社區網站

阿比似乎是核心呢。但是...... cronjob等呢?其實他們不應該成爲網站的一部分,因爲這只是一個'客戶'。我覺得他們應該直接與模型或API交互。所以基本上API變得更像一個門戶的核心,我想我需要這樣的:

  1. 社區爲核心
    • 模型
    • Cronjobs
    • 自動郵件(cronjobs的一部分)
      • 發票等
  2. 社區API
    • 交互通過HTTP
  3. 社區網站
    • 網站
    • 聯繫

核心的cronjob核心模型s是REST結構的一個例外。他們是唯一可以在不通過API的情況下更改數據的人。至少這是我的想法,因爲他們屬於核心,API是核心。

但通過設計,這似乎只是錯誤的。操作應該只通過API!

備選:

  1. 社區爲核心
    • 模型
  2. 社區API
    • 互動通過HTTP在覈機型
  3. 社區商業
    • Cronjobs
    • 自動郵件(cronjobs的一部分)
      • 發票等
  4. 社區網站
    • 網站
    • 聯繫

這看起來通過設計更好的給我。 Mindmap illustration http://mauserrifle.nl/mindmap.jpg

主要問題

1)

應該cronjobs通過API或Core模式操作?

2)

我的發票的cronjob需要一個模板幾乎當然主要網站的風格。但是如果我的cronjob是業務或核心的一部分,它不會知道我的主要網站。解決這個問題有意義嗎?

3)

我的網站將使用鬍子作爲模板引擎。 (php和javascript都可以解析這些模板)。我想直接使用API​​的Ajax調用,但後來意識到:

該網站從API獲取數據,格式化時間戳時間(Y-M-d)爲模板,然後渲染。如果我讓javascript直接調用api,javascript也必須有邏輯(格式化)。這是重複的代碼!感覺像唯一的解決方案是調用網站的Ajax(調用api和格式)並返回格式化的json。我對嗎?

但是....簡單的調用,如刪除一個廣告可以去直接通過API(例如,刪除:/廣告/ 1

我收到電話的混合....

任何更好的解決方案此

4)

總:是我的建築太複雜?我應該考慮任何替代方案?

我很想聽聽您的意見!

回答

3

一旦我聽說要開發一個Web應用程序的好辦法是建立一個API-Centric Web Application。對我來說,如果你將主要服務與公共API結合起來,構建一個以API爲中心的應用程序,那麼你就完全喪失了開發公共API的全部意義。

+0

我假設你的最後一句話是肯定的? (通過構建API-Centric,你已經擁有了一個公共API?)感謝那篇文章,它指的是Twitter博客,它激勵我使用這種構建方式,所以一定要閱讀這篇文章,然後回到這個話題稍後:) – mauserrifle 2012-02-27 13:56:21

+0

好吧,我已經實施的文章(kohana方式)的大部分。我對創建該網站作爲API的客戶端有很好的感覺。仍然不確定在哪裏把cronjobs等(這是內部邏輯)。我還必須建立一個管理員(網站的一部分)來管理所有額外的實體,這感覺就像是一項工作的開銷:/再次,一旦構建......未來有很多可能性。提示? – mauserrifle 2012-02-27 15:08:30

+0

這正是我的觀點。幾乎100%的案例都需要具備與應用程序相關的特定功能,例如cronjob,這些功能並不適合採用以API爲中心的方法。這意味着在我看來,應該將Web服務與主應用程序(如wsdl)分離。 – 2012-03-07 13:22:09

2

這似乎並不符合邏輯的我。

是的,API和網站以及接下來可能會發生的事情都是單獨的事情,網站應該是API本身的客戶端,但由於它將簡化事務,所以我相信您應該重新使用域類構建並建立您的網站邏輯。通過這種方式,您可以使用所有相同的代碼庫,並輕鬆處理所有問題,包括廣告,發票和課程上傳。

對於公共API,它應該是在一個單獨的盒子如果可能的話再使用相同的域名類別,但不同的認證方法,因此,無論可能出現問題,也不會影響主業務。

你的cron的作業,才應使用防火通過API本身的調用,這些調用應在主應用程序(通過API網站)

如果你建立自己的網站進行不重複自己動手,如同使用與基礎相同的代碼並將web應用程序包裝在其中一樣,您將不會在q#2中引發問題。

同樣適用於題號3.如果纏繞在API的網站,該網站可以使用API​​本身沒有被一個獨立的實體。

你的架構看似複雜,但如果你做這些事情,這將是簡單的。;-)

祝你好運!

+0

感謝您的回覆。如果我理解正確的話: 1.是一個像crons,郵件,ORM等(包括IMGS用於創建PDF) 2.內部處理核心API使用這個核心,使一切公共 3.網站將僅使用API​​的客戶端。 因此得出結論:如果API崩潰,網站也停止運行,但自動進程將繼續運行? 我也需要建立一個管理面板。我應該把這個作爲客戶端在網站上呢?否則我會得到2個接入點。感覺像額外的工作,使一切工作通過API,但最終還清 – mauserrifle 2012-02-27 15:25:31

+2

再次您好。 #1正確。核心內容包括所有內部流程和API副本。 #2第二次安裝(在不同的linux box-vps API ONLY {for public}#3網站上可以用#1核心的API封裝在單獨的盒子上。 DB ONLY 1個用於公共API的linux框1個用於私有API和域類和網站的Linux框(或者網站也可以是通過內部網絡用於安全性的不同框)這不應該是額外的工作,因爲PHP類將會要%100相同,但存在於兩個盒子,可擴展性和安全性。祝你好運。 – Phil 2012-02-27 17:12:12

0

REST只是一個發起請求的方式。處理請求的核心代碼不應該與REST接口或HTTP緊密耦合。我建議將REST API設計爲包含文件或類似的簡單映射器。你的cron可以繞過整個REST API,直接包含文件。將請求接口與實際處理的代碼分開。

+0

Kohana中有一個真棒子請求的系統已經,沒有需要破解的事情。 – Kemo 2012-02-26 23:36:51

+0

我同意了黑客中的點本身我不你明白什麼意思繞過REST API? – mauserrifle 2012-02-27 12:54:40

+0

REST API更多的是一個記錄界面,用於從外部源與你的系統進行交互,你需要解析請求並判斷它是否有效。 「可信/內部」來源t可以直接調用路由,不需要解析請求。 REST是你的鄰居敲門要求的東西,cron是你已經在裏面的室友,並且知道一切都在哪裏。 – 2012-02-27 15:58:42

相關問題