2017-09-15 2 views
4

JSON API는 속성/매개 변수의 여러 오류를 별도로 나열하도록 지정합니다. 한 번에 여러 매개 변수가 포함 된 단일 오류를 처리하는 가장 좋은 방법은 무엇입니까?JSON API로 여러 속성 또는 매개 변수로 오류 처리

예를 들어, 종단점이 bid 또는 fold 매개 변수 중 하나를 허용하지만 둘 다 허용하지는 않습니다 (상호 배타적 인 경우). 두 매개 변수가 모두 제출되면 오류 응답은 무엇입니까? (GET /endpoint?bid=100.00&fold=muck)?

각 속성에 대해 두 번 오류를 두 번 나열 하시겠습니까?

{ 
    "errors": [ 
    { 
     "status": "400", 
     "source": { "parameter": "bid" }, 
     "detail": "Cannot accept both 'bid' and 'fold' parameters." 
    }, 
    { 
     "status": "400", 
     "source": { "parameter": "fold" }, 
     "detail": "Cannot accept both 'bid' and 'fold' parameters." 
    } 
    ] 
} 

속성을 결합 하시겠습니까?

{ 
    "errors": [ 
    { 
     "status": "400", 
     "source": { "parameter": ["bid", "fold"] }, 
     "detail": "Cannot accept both 'bid' and 'fold' parameters." 
    } 
    ] 
} 

은 전체 요청에 대해 하나의 높은 수준의 오류를 확인?

{ 
    "errors": [ 
    { 
     "status": "400", 
     "source": { "pointer": "/data" }, 
     "detail": "Cannot accept both 'bid' and 'fold' parameters." 
    } 
    ] 
} 

다른 방법으로?

답변

3

TL 버전 : 첫 번째 버전이 맞을 수 있습니다.

JSONAPI 사양이나 포럼에서는 상호 배타적 인 매개 변수/데이터에서 오류를 형식화하는 방법에 대해 자세히 설명하지 않습니다. 그것은 this을 가지고 :

서버에 문제가 발생되는 즉시 처리를 중지하도록 선택할 수 있습니다, 또는 처리를 계속 여러 문제가 발생할 수 있습니다. 예를 들어 서버는 여러 속성을 처리 한 다음 단일 응답으로 여러 유효성 검사 문제를 반환 할 수 있습니다.

"첫 번째 매개 변수를 사용할 때 금지 된 두 번째 매개 변수를 포함하는 경우 하나의 오류 또는 여러 개의 오류가 있습니까?"라는 질문을 수정하십시오.

이는 하나의보기에서 하나의 오류 (Cannot accept 'bid' when using 'fold') (또는 주문과 관련하여 반대 방향으로)가 있음을 나타내며, 그 오류는 하나의 매개 변수를 가리킬뿐입니다. 당신이 매개 변수 중 하나를 처리 할 때까지 그 오류.

실제적으로 두 매개 변수가 동시에 있는지 확인하고 하나의 매개 변수가 있고 다른 매개 변수와 마주 치기 때문에 오류가 발생하지는 않습니다. 그러나 두 매개 변수를 모두 갖고 있어야하므로 처리해야합니다. 그 문제. 이것은 여전히 ​​두 개의 매개 변수를 가리키는 단일 오류입니다 (이것은 질문의 전제입니다).

매개 변수 : :이 JSONAPI spec for Error Objects

이 나타내는 문자열을 URI 쿼리 매개 변수는 오류가 발생한 있는지를 나타내는.

당신이이 string (하지 Array) 오류의 원인을 나타 내기 위해 사용해야하며, 오류가 매개 변수에 나는에 위의 배치로하지 요청 본문, 당신이보기의 선택의 여지가 있기 때문에 첫 번째 예제에서와 같이 매개 변수 중 하나만으로 인해 발생하는 단일 오류 또는 두 매개 변수와 동일하게 발생하는 동일한 오류라고합니다.

필자는 개인적으로이 매개 변수가 쿼리 문자열의 마지막에 오는 단일 오류로 보는 것을 선호하지만 첫 번째 옵션이 아마도 가장 정확할 것입니다.

+0

FWIW, 우리의 구현에서 두 개의 매개 변수 충돌, 우리는 오류없이 빈 집합을 반환합니다. POST/PATCH에서 오류를 처리하는 대신 오류를 일으키는 속성 중 하나를 선택했습니다. – jdubjdub

2

플랜 A는 오류의 전체 컨텍스트를 다시 부활시키는 것이 호출자에게 푸시됩니다. 예를 들어, 호출자가 하나의 오류를 수정하고 다른 하나가 "마법처럼"사라진 경우 - 잠재적으로 혼란 스러울 수 있습니다.

플랜 A에서 meta 옵션을 추가하여 교차 연결을 추가 도움말으로 지적 할 수 있습니다.

비교에서 플랜 B은 오류 시나리오의 본질 (다중 매개 변수)을 캡처하고이를 간결하게 고정하므로 정확하다고 느낍니다. 물론 source의 배열을 요청하는 API 기능을 요청해야합니다. 예를 들어 :

"source" : [ {parameter...}, {parameter...} ] 
+0

'Plan B'로''source ": {"parameter ": ["bid ","fold "]}'두 매개 변수를 결합하는 것을 의미한다고 가정합니다. 이것이 나에게 좋을 지 모르지만 JSON API는 "매개 변수 (어떤 URI 쿼리 매개 변수로 인해 오류가 발생했는지 나타내는 문자열이어야 함)"를 지정합니다. 난 그냥 사양에서 벗어나고 싶지 않아. –

+0

내가 실제로 염두에 두었던 것은''source ": [{parameter ...}, {parameter ...}]'그러나 스펙이 변경된 것은 오래 걸린 프로세스 일 수 있음을 이해합니다. – Dinesh

관련 문제