簡體   English   中英

Django Rest Framework:從外部API調用內部API

[英]Django Rest Framework: Calling Internal API from External API

我必須在給定的Django Rest Framework中從外部API調用內部API。 當用戶單擊前端(位於Angular中)的某個按鈕( 'View Calendar' )時,將調用DRF的API終結點( '/viewCalendar/' )。 這是外部API端點。 /viewCalendar/的終結點的views.py中,我需要以這樣一種方式編寫代碼,使其將調用另一個API(例如, '/commandExecForCalendar/' ),該API實際上將執行該方法並返回輸出。 此輸出將進一步通過外部API響應到前端。 外部和內部API都位於同一DRF項目中。

 myDRFProj/
   commandExecApp/
       views.py -------- > this  CBV works for internal calls
       .
       .
   externalAPIApp/
       views.py  -------- > this CBV handles API call from front-end and it will call the API for internal calls

   mydrfproj/
       settings.py
       urls.py ---------- > holds both external and internal API endpoints

urls.py

 url(r'commandExecForCalendar', commandExecAppView.cmdExcFrCalendar.as_view()),
 url(r'viewCalendar', externalAPIAppView.extApiCall.as_view()),

那么,如何編寫這兩個視圖,使外部視圖將請求數據發送到內部,並從中獲取結果到前端的Response?

根據您API的復雜性,您可以設計externalAPIApp視圖,從而將CommandExecApp CBV子類化。

我過去曾嘗試過這種方法,但由於功能簽名和基於DRF類的視圖的返回類型,因此遇到了障礙。 通過應用程序中的繼承(相對於組合)擴展功能時,這種情況並不罕見。

也就是說,有幾種方法可以解決此問題:

API網關

externalAPIApp設計為充當網關Web服務,該服務本質上是通過HTTP將HTTP請求傳遞到commandExecApp API。

您可以查看externalAPIApp將對commandExecApp發出的“客戶端”請求的請求庫。

共享域模塊

考慮應用程序的三個主要組件:

  1. 外部API:隔離的API,可供外部客戶端訪問並對其進行授權。
  2. 內部API:內部客戶端可以訪問並授權內部客戶端的隔離API。
  3. 域模塊:一個獨立的Python模塊,處理與Django ORM的所有交互。

權衡

兩者都有優點和缺點。

網關方法引入了一些與其他(本地)網絡請求相關的延遲。 另一方面,DRF為開發人員提供了節省時間的功能/組件,使其可以與域邏輯緊密耦合。

共享域模塊提供了更大的關注點分離,但可能涉及預先編寫和測試更多代碼。

最終,要了解您的開發進度,技術路線圖,相關人員等,這是一個架構決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM