2010-10-14 80 views
4

我有一個應用程序,我設計了這個應用程序有一個相當不錯的核心dll,其中包含我的主視圖的exe使用的API。我希望允許其他開發人員訪問此核心DLL,但我不希望他們擁有和我一樣多的訪問權限,因爲這會帶來安全風險。暴露我的核心dll的標準方式是什麼?有什麼特別的設計模式我應該看?什麼是將關鍵類/方法我的核心API暴露給第三方開發者的最佳方式?

我使用C#

編輯:我的問題是如此這裏有點含糊一些澄清

我的程序被部署爲Windows EXE它引用core.dll。我希望其他人在啓動時通過在/ extensions目錄中加載dll來創建可以動態加載到我的程序中的擴展。第三方dll將在我的core.dll中繼承/實現某些類/接口。我只想給第三方有限訪問我的核心,但我想給我的exe額外訪問核心。

我應該提到,這是我第一次編寫導入DLL的程序。也許這種允許用戶添加擴展的方法是錯誤的。

+0

你在說什麼安全風險? exe在哪裏運行(服務器端還是客戶端)? – 2010-10-14 03:02:01

+0

@Adrian K - 這實際上是一個很好的觀點。我想他正在談論一個Web API,但這聽起來像是他想給其他開發人員「添加」一個縮減的DLL(在他們的項目中添加對DLL的引用)。這不是一個真正的API。 – RPM1984 2010-10-14 03:09:41

+0

我不想進入語義學,但術語SDK更合適嗎? – i8abug 2010-10-14 04:22:53

回答

3

如何修改/公開我的API爲 其他開發人員?

故意允許其他開發人員與你建立在許多事情上觸摸的API,它可以分解爲兩個方面的工作:

  1. 資源(文檔,示例等),這使得它他們更容易理解(是的 - 基本上是一個SDK)。
  2. 構建,構建和部署您的解決方案,以便輕鬆實際使用。

例子包括:

  • 通過適合再利用的方式包裝它。
  • 通過使用其他人可以輕鬆遵循的命名約定和成員名稱。
  • 文檔,樣本。
  • 提供源代碼(作爲開源代碼),如果您很高興能夠對其進行修改。

我想允許其他開發人員 訪問此核心DLL很好,但我 不想讓他們有和我一樣的訪問權限 ,因爲這將是一個安全 風險。

好吧,這讓我們進入第二個領域 - 實際的解決方案。

你有的問題不是一個小問題 - 但它也相當可行;我建議:

您面臨的最大問題是您進入了嚴肅的架構領域 - 您現在做出的決定將對解決方案的所有方面產生深遠影響。所以你可能無法迅速作出明智的決定。仍然 - 你必須從某處開始:)

+0

+1 - 好的答案(基於問題的模糊性)。 – RPM1984 2010-10-14 04:09:32

+0

感謝您的洞察力。我已經更新了一些問題以增加一些清晰度 – i8abug 2010-10-14 04:17:16

+0

謝謝。託管擴展性框架將指向我正確的方向。 – i8abug 2010-10-14 19:28:01

2

由於您使用的是C#,我會查看微軟的Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries並使用FxCop來強制其中的很多(最新版本here)。這不是你可能需要的全部,但它會幫助你朝正確的方向發展。

此外,請看同一作者免費提供的框架設計指南distillation

+0

感謝您的鏈接。我只是通過升級閱讀,它提供了一些我可以做的事情清理我的API的好點。它不包括安全問題(除非我錯過了),但也許它在書中。我會在這個週末看看它。 – i8abug 2010-10-14 04:02:55

+0

我不認爲這本書會進入安全本身。我提供了鏈接,因爲它會幫助代碼更易於使用(即拋出的異常符合某個標準,而不是暴露列表(使用IList 代替)),並有助於使其更穩定。對於關於架構考慮的其他建議有很多的重要性,而我第二個想法是在你的核心功能之上加入一個圖層 – Matt 2010-10-14 12:20:39

+0

這很不錯,只是想補充說我找到了一個演示文稿的鏈接,比蒸餾更詳細一點。http://www.myplick.com/view/27oOmIWNgx-/Brad-Abrams-Framework-Design-Guidelines – i8abug 2010-10-16 05:22:14

2

「設計模式」在API方面與REST更相關。

我不希望他們有儘可能多的 訪問的我,因爲這將是一個 安全風險

那麼我會(用於維護的緣故),層頂核心DLL額外的邏輯來防止這種情況。

事情是,「客戶」調用API,而不是核心DLL。

「如何」API訪問核心DLL是在你的完全控制之下。只是暴露你希望的運營合同。

+0

我從來沒有公開過一個API,其中安全性是一個問題。我在我的核心dll的頂部?我可以創建一個API dll,但它需要引用核心。如果用戶想要,他們仍然可以通過API的dll和使用核心,除非有某種方式鎖定它。 – i8abug 2010-10-14 03:58:35

+0

@ i8abug - @Adrian K的回答會幫助你。這聽起來並不像是在暴露一個API,而只是「給開發人員代碼」 - 在他們的程序集中引用。如果是這種情況,則需要修改Core.dll上的可訪問性修飾符。要麼,要麼不給他們的DLL,讓他們以另一種方式使用功能(基於REST的服務,WCF等 - 一個「真正的」API) – RPM1984 2010-10-14 04:11:22

相關問題