2010-04-10 13 views
7

Pracuję nad interfejsem API, który akceptuje dane ze zdalnych klientów, z których niektóre w kluczu HTTP POST funkcjonują prawie jak tablica. Po angielsku oznacza to, że mam zasób na moim serwerze zwany "klasą". Klasa w tym sensie jest typem, w którym uczeń siedzi, a nauczyciel kształci się. Gdy użytkownik przesyła komunikat POST HTTP, aby utworzyć nową klasę dla swojej aplikacji, wiele kluczowych par wartości wygląda następująco:Kilka par klucz/wartość w protokole HTTP POST, gdzie klucz ma tę samą nazwę.

student_name Bob Smith
student_name: Jane Smith
student_name: Chris Smith

Jaki jest najlepszy sposób obsłużyć to zarówno po stronie klienta (powiedzmy, że klient jest cURL lub ActiveResource, cokolwiek ..) a co przyzwoity sposób obsługi tego na serwerze, jeśli mój serwer jest aplikacją Ruby on Rails? Potrzebujesz sposobu na udostępnienie wielu kluczy o tej samej nazwie i bez konfliktów przestrzeni nazw lub utraty danych.

Moim wymaganiem musi być to, że dane POST to pary klucz/wartość urlencoded.

Odpowiedz

20

Są dwa sposoby na poradzenie sobie z tym i będzie zależało od twojej architektury po stronie klienta, jak to zrobić, ponieważ standardy HTTP nie sprawiają, że sytuacja jest zła i sucha.

Tradycyjnie, żądania HTTP będą po prostu używać tego samego klucza dla powtarzających się wartości i pozostawić je architekturze klienta, aby zrozumieć, co się dzieje. Na przykład można mieć żądania POST z następujących wartości:

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

Gdy architektura odbiorcza ma ten ciąg, to zdać sobie sprawę, że istnieją liczne klucze student_name i podjąć odpowiednie działania. Jest zwykle zaimplementowany, więc jeśli masz pojedynczy klucz, tworzona jest wartość skalarna, a jeśli masz wielokrotności tego samego klucza, wartości są umieszczane w tablicy.

Współczesne architektury po stronie klienta, takie jak PHP i Rails, używają jednak innej składni. Dowolny klawisz chcesz być odczytywane jako tablica dostaje nawiasy kwadratowe dołączone, tak:

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

odbiorcze architektura stworzy strukturę tablicy o nazwie „student_name” bez nawiasów. Składnia nawiasów kwadratowych rozwiązuje problem polegający na tym, że nie można wysłać tablicy zawierającej tylko jedną wartość, której nie można obsłużyć metodą "tradycyjną".

Ponieważ używasz Rails, składnia nawiasów kwadratowych byłaby drogą do zrobienia. Jeśli uważasz, że możesz zmienić architekturę po stronie serwera lub chcesz rozpowszechniać swój kod, możesz przyjrzeć się bardziej agnostycznym metodom, takim jak kodowanie JSON wysyłanych ciągów, co zwiększa obciążenie, ale może być przydatne, jeśli jest to sytuacja, w której spodziewasz się Muszę sobie poradzić.

Istnieje świetny wpis na ten temat w kontekście JQuery Ajax parameters here.

+2

+1. Parser parowania ścieżek nadpisze wartość, chyba że masz []. – Tilendor

0

Wyślij swoje dane jako XML lub JSON i parsuj wszystko, czego potrzebujesz.

+0

Powinienem stwierdzić powyżej, że muszę obsługiwać pary klucza/wartości ze słowami kluczowymi, tak jak obsługuje je typowa przeglądarka. Zmienię moje pytanie, aby to odzwierciedlić. – randombits

Powiązane problemy