2012-01-20 4 views
3

개체 목록을 반환하는 REST 서비스가 있습니다. 각 개체에는 objectcodeobjectname이 포함됩니다.JSON 응답을 어떻게 포맷해야합니까?

이것은 처음으로 REST 서비스를 작성한 것이므로 응답 서식을 지정하는 방법을 잘 모르겠습니다.

{ 
    "objects": { 
     "count": 2, 
     "object": [ 
      { 
       "objectcode": "1", 
       "objectname": "foo" 
      }, 
      { 
       "objectcode": "2", 
       "objectname": "bar" 
      }, 
      ...more objects 
     ] 
    } 
} 

또는

[ 
    { 
     "objectcode": "1", 
     "objectname": "foo" 
    }, 
    { 
     "objectcode": "2", 
     "objectname": "bar" 
    }, 
    ...more objects 
] 

내가이 조금 주관적 수 있습니다 실현하지만, 이는 소비하기 쉬울 것 :

그것은되어야 하는가? 나중에 XML 형식의 응답을 지원해야합니다.

+0

지금은 앱을 만들고 웹 서비스는 두 번째 것과 같은 응답 (루트에있는 배열)을 반환합니다. 문제는 RestKit으로이 상황을 관리 할 수 ​​없다는 것입니다. 모르는 한계가 있습니까? 응답이 배열 일 때 어떻게 응답 기술자를 생성합니까? 미리 감사드립니다. – Ricardo

답변

3

둘 다 잘 처리되는 라이브러리이므로 소비가 동일합니다. 첫 번째 방법은 두 번째 방법보다 장점이 있습니다. 기존 코드를 손상시키지 않고 개체 (예 : 범주)에 추가 된 다른 정보를 포함하도록 응답을 확장 할 수 있습니다. 이 구문 분석하는 동안 저장됩니다으로

뭔가 또한

{ 
    "objects": { 
     "count": 2, 
     "object": [ 
      { 
       "objectcode": "1", 
       "objectname": "foo" 
      }, 
      { 
       "objectcode": "2", 
       "objectname": "bar" 
      }, 
      ...more objects 
     ] 
    } 

"categories": { 
    "count": 2, 
    "category" : [ 
    { "name": "some category"} 
    ] 
    } 
} 

처럼 JSON은 어떤 방식으로 서식, 그래서 공백을 제거해서는 안 바꿈 등 또한, 카운트가 정말 필요하지 않습니다 객체 자체.

+1

당신은 내가 생각하지 못했던 좋은 점들을 만듭니다. 기존 코드를 손상시키지 않고 응답을 확장 할 수 있다는 점이 분명하고 응답을 분석해야하는 경우 카운트가 중복되는 것처럼 보입니다. – xbonez

+0

이것이 페이스 북이 모든 JSON 요청을 리턴하는 방식이므로,이 형식에 대해서는 플러스로 생각한다. 이는 응답의 일관성을 유지하면서 많은 유연성을 제공합니다. – blachniet

+0

네, 동일한 경험을했습니다 (여러 응답으로 여러 iPhone 응용 프로그램 버전을 지원함). 두 번째 접근 방식을 따른다면 이전 버전을 깨뜨렸을 것입니다. – Femaref

-1

클라이언트로서 나는 두 번째 형식을 선호합니다. 첫 번째 형식에 "객체"의 개수 만 포함되어 있으면 중복 된 정보입니다.

2

자주 첫 번째 것을 봅니다. 때로는 메타 데이터를 갖기 위해 데이터를 조작하는 것이 더 쉽습니다. 예를 들어 Google API의 첫 번째 사용 : http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true

+0

Google 응답에는 필드 "Status"가 있습니다. "Ok". 머리글을 통해 전달하면 안됩니까? – xbonez

+0

'status'필드는 서버가 데이터를 반환하는지 여부를 나타냅니다. URL 또는 매개 변수의 '오류 상태'와 '데이터 상태 없음'을 구별하는 것입니다. 헤더에서 전달 된 경우 개발자가 차이를 만들 수 있습니다. – JuSchz

+0

메타 데이터 사용에 대한 답변입니다. 그리고 현실 세계의 예를 제공해 주셔서 감사합니다. @xbonez의 "상태"에 대한 질문은 JSend http://labs.omniti.com/labs/jsend의 (논쟁의 여지가있는) 철학입니다. – RayLuo

1

그것은 개인적인 취향의 질문뿐만 아니라; 요구 사항에 대한 질문이기도합니다. 예를 들어, 내가 같은 상황에 있고 클라이언트 측에서 객체 수를 필요로한다면 첫 번째 방법으로 갈 것입니다. 그렇지 않으면 두 번째 방법을 선택합니다.

"클래식"REST 서버는 대부분 다른 방식으로 작동합니다. 일부 REST 함수가 오브젝트 목록을 리턴하는 경우 URL의 목록 만 리턴해야합니다. URL은 세부 정보 끝점을 가리켜 야합니다. 따라서 각 끝점을 쿼리하면 특정 단일 개체에 대한 세부 정보를 얻을 수 있습니다.

관련 문제