2017-10-19 54 views
1

我正在使用一個非常奇怪的(和令人討厭的)API,我無法控制,不幸的是,當發出無效請求時,而不是以4xx狀態響應,它響應200狀態。馬克成功的午睡反應,因爲錯誤

使用此響應,它也將響應正文從通常的XML響應更改爲純文本,但不會更改內容類型標題。你可以想象這有多惱人!

我已經得到了Siesta與API的合作,並且事實上它沒有絲毫的REST風格,但我不確定如何讓下一部分工作 - 處理不成功的請求。

我該如何着手將技術上有效且成功的200響應轉換爲錯誤響應?現在,我有以下設置:

configure("/endpoint") { 
    $0.mutateRequests { req in 
    ... perform some mutation to request ... 
    } 
    $0.pipeline[.parsing].add(self.XMLTransformer) 
} 

configureTransformer("/endpoint") { 
    ($0.content as APIResponse) 
    .data() 
    .map(Resource.init) 
} 

這工作得很好,當反應實際上是XML,但是在響應是一個錯誤的情況下,我收到以下:

bad api request: invalid api key 

或類似的東西。 XMLParser類已經在處理這個問題,並且將其標記爲遇到錯誤,但是我不知道如何讓Siesta意識到存在錯誤,並且不會調用我的變換器,而是將請求標記爲失敗我可以在別處處理錯誤。

我該如何實現我所追求的目標?

回答

0

configureTransformerjust a common-case shortcut是Siesta管線支持的全功能(但更詳細)任意變壓器。全變壓器可以任意轉換任何響應任何其他,包括成功→失敗和失敗→成功。 user guide discusses this有點。

您可以在示例項目,其中有一個客戶變壓器,做一些非常相似到你想要的東西,把一個404 失敗成功與內容false行動看到這一點。它是configured heredefined here。該示例執行失敗→成功轉換,但您應該找到適合您的成功→代碼失敗的代碼。

+0

謝謝!想想我已經設法使它工作:D – PaReeOhNos