2015-10-15 3 views
0

Я пытаюсь создать веб-службу, которая принимает несколько массивов (типа double) и возвращает среднее значение каждого из этих массивов.Работа с большим количеством данных с помощью веб-службы REST

Для начала я написал скрипт, который извлекает массив с помощью метода HTTP GET и вычисляет ее среднее, возвращая его в ответ в формате JSON:

<?php 
header("Content-Type:application/json"); 
if(!empty($_GET['array'])) { 
    //calculate mean of each array and send results 
    $array = $_GET['array']; 
    $mean = array_sum($array)/count($array); 
    respond(200,"OK",$mean); 
} else { 
    //invalid request 
    respond(400,"Invalid Request",NULL); 
} 

function respond($status,$message,$data) { 
    header("HTTP/1.1 $status $message"); 
    $response['status']=$status; 
    $response['message']=$message; 
    $response['data']=$data; 
    $json_response=json_encode($response); 
    echo $json_response; 
} 
?> 

Однако я очень быстро понял, что с большим массивом (скажем, 15000 значений) моя строка запроса, используемая для передачи значений, станет настолько большой, чтобы быть непрактичной, если она даже работает (я прочитал, что многие системы помещают ограничение в 2000 символов по длине URL). Итак, я ищу другой способ передачи данных на службу, которые не будут ограничены таким образом. Массивы будут генерироваться клиентской программой. Я использую последний стек XAMPP для сервера.

ответ

1

Вы можете использовать POST вместо GET. Способ сделать это зависит от языка вашего клиента. Например, с помощью JQuery:

$.post('http://yourserver.com', yourArray, function (data, status) { 
    //handle the response of the server 
}); 
1

Для данных, о которых вы говорите, вы правы, GET не является подходящим способом его отправки. Используйте POST.

0

Я предполагаю, что у вас есть контроль над клиентской программой, в этом случае, изменить клиент использовать HTTP Request, с содержанием запроса в организме.

Если у вас нет контроля над клиентской программой, вам не повезло. Если клиент отправляет запрос в $ _GET, вы должны получить его таким образом.

Смежные вопросы