2010-04-10 4 views
7

HTTP POST의 키가 배열로 거의 기능하는 원격 클라이언트의 데이터를 받아들이는 API를 개발 중입니다. 영어로 이것은 서버에 "클래스"라는 리소스가 있다고 가정합니다. 이러한 의미의 클래스는 학생이 참여하는 유형이며 교사가 교육하는 유형입니다. 사용자가 애플리케이션에 대한 새로운 클래스를 만들기 위해 HTTP POST를 제출하면HTTP POST에서 복수 키/값 쌍 key가 동일한 이름

student_name과 같은 모양이됩니다. : 밥 스미스
STUDENT_NAME : 제인 스미스
STUDENT_NAME : 크리스 스미스

무엇 클라이언트 측 모두에서이 문제를 처리하는 가장 좋은 방법 어떤 괜찮은 방법 (의 클라이언트가 컬 또는 ActiveResource, 어떤 .. 가정 해 봅시다) 서버가 Ruby on Rails 앱인 경우 서버 측에서 처리해야합니까? 이름이 같고 이름 공간이 충돌하거나 데이터가 손실되지 않는 여러 키를 허용하는 방법이 필요합니다.

내 요구 사항은 POST 데이터가 urlencoded 키/값 쌍이라는 것입니다.

답변

20

이 문제를 처리하는 방법에는 두 가지가 있으며, HTTP 표준이 상황을 잘게 말리고 건조시키지 않으므로 클라이언트 측 아키텍처에 따라 달라집니다.

전통적으로 HTTP 요청은 반복되는 값에 대해 동일한 키를 사용하고 클라이언트 아키텍처에 그대로 두어 무슨 일이 벌어 졌는지 알 수 있습니다. 수신 구조는 해당 문자열을 얻을 때

student_name=Bob+Smith&student_name=Jane+Smith&student_name=Chris+Smith 

, 그것은 student_name의 여러 키가 있었다는 것을 인식하고 그에 따라 행동 할 것이다 : 예를 들어, 다음과 같은 값으로 POST 요청을 가질 수 있습니다. 단일 키가 있으면 스칼라 값이 만들어지고 같은 키의 배수가 있으면 값이 배열에 저장되도록 구현됩니다.

그러나 PHP와 Rails 같은 최신 클라이언트 측 아키텍처는 다른 구문을 사용합니다. 배열과 같이 대괄호가 추가수록 당신이 원하는 모든 키에서 읽을 수 :

student_name[]=Bob+Smith&student_name[]=Jane+Smith&student_name[]=Chris+Smith 

수신 구조는 괄호없이 "STUDENT_NAME"라는 이름의 배열 구조를 만들 것입니다. 대괄호 구문은 "전통적인"방법으로 처리 할 수없는 단일 값만 가진 배열을 보낼 수 없다는 문제를 해결합니다.

레일스를 사용하고 있기 때문에 대괄호 구문을 사용하는 것이 좋습니다. 서버 측 아키텍처를 전환하거나 코드를 배포하려는 경우 전송되는 문자열을 JSON 인코딩하는 것과 같이 더 많은 방법을 고려할 수 있습니다. 오버 헤드가 추가되지만 예상되는 상황 인 경우 유용 할 수 있습니다 처리해야합니다.

JQuery Ajax parameters here의 문맥에서이 모든 것에 대한 훌륭한 글이 있습니다.

+2

+1. 레일즈 params parser는 []가 없다면 그 값을 덮어 씁니다. – Tilendor

0

데이터를 XML 또는 JSON으로 보내고 필요한 데이터를 파싱합니다.

+0

일반적인 브라우저에서 처리하는 것처럼 urlencoded 키/값 쌍을 지원해야한다고 위에서 언급 했어야합니다. 나는 그것을 반영하기 위해 나의 질문을 편집 할 것이다. – randombits

관련 문제