[英]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
發出的“客戶端”請求的請求庫。
共享域模塊
考慮應用程序的三個主要組件:
權衡
兩者都有優點和缺點。
網關方法引入了一些與其他(本地)網絡請求相關的延遲。 另一方面,DRF為開發人員提供了節省時間的功能/組件,使其可以與域邏輯緊密耦合。
共享域模塊提供了更大的關注點分離,但可能涉及預先編寫和測試更多代碼。
最終,要了解您的開發進度,技術路線圖,相關人員等,這是一個架構決定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.