2017-07-07 77 views
-1

如果在下面的情況下還有其他方法需要建議。關於終點的一個屬性

  1. 我們在Azure上的功能現有的API端點(XYZ)消耗其他Web的API(ABC高清)。許多消費者使用端點。
  2. 我們有一個解決方案,消耗超過xyz API來生成報告。
  3. 使用上述解決方案報告的客戶需要多一個屬性(propme),這對他們來說非常重要。
  4. XYZ可被修改以從ABC消耗一個附加屬性propme
  5. 以上操作將改變xyz響應,其他消費者不需要使用它。

我們來到了上面的想法是讓我們的解決方案消耗XYZ和以及ABC。這會給我們我們想要的輸出,但會增加API調用的數量。因此,增加生成報告的時間。

有什麼辦法可以讓我們使用一個API調用來獲得上述。

+0

添加一個新的屬性通常不應該破壞現有的客戶端...爲什麼你不願意這麼做? – Mikhail

+0

我們不想向少數消費者展示這些信息(新財產)。 – Vicky

+1

如果HTTP請求標頭包含標誌或基於授權標頭,則只能添加它。 – Mikhail

回答

0

正如Mikhail在他的評論中提到的,您可以在請求標頭中包含一個標誌,指示響應是否需要包含附加屬性propme。您可以從功能代碼中的請求標頭中提取標誌值,並動態創建並返回響應。以下示例代碼供您參考。

using System.Net; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) 
{ 
    log.Info("C# HTTP trigger function processed a request."); 

    // parse query parameter 
    string name = req.GetQueryNameValuePairs() 
     .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0) 
     .Value; 

    // Get request body 
    dynamic data = await req.Content.ReadAsAsync<object>(); 

    // Set name to query string or body data 
    name = name ?? data?.name; 

    IEnumerable<string> headerValues; 

    var response = new HttpResponseMessage(); 

    if(req.Headers.TryGetValues("requiredpropme",out headerValues)){ 

     if(headerValues.FirstOrDefault()=="1"){ 
      response = req.CreateResponse(HttpStatusCode.OK, "the request contains requiredpropme in request header"); 
     } 
     else{ 
      response = req.CreateResponse(HttpStatusCode.OK, "the request does not contain requiredpropme in request header"); 
     } 
    } 

    return name == null 
     ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body") 
     : response; 
} 

如果使用不同的值傳遞requiredpropme,將返回不同的反應。 enter image description here

+0

謝謝。但是,由於這些端點將會暴露給客戶,我們不希望冒險在標題中添加任何標誌,這樣做可能會有風險,因爲在標題中添加此標誌可以提供我們不知道的隱藏數據想。 – Vicky