Если вы только когда-либо ожидать GET запросов, нет ничего плохого в том, что у вас есть per se. Есть ли лучше путь? Есть, конечно, разные способы, которые могут считаться лучшими в зависимости от того, что вам нужно делать. Поскольку вы пытаетесь получить основную идею веб-сервисов, я обращусь к этому.
Существует множество способов реализации веб-сервисов, большинство из которых оказываются излишними для основных приложений. Я думаю, что проще всего понять и реализовать REST.
REST - это архитектурный стиль для проектирования сетевых приложений. Идея состоит в том, что вместо использования сложных механизмов, таких как CORBA, RPC или SOAP для соединения между машинами, простой HTTP используется для совершения вызовов между машинами. — Learn REST: A Tutorial
Также взгляните на:
Существуют и другие методы (напримерSOAP), что я не имею никакого опыта, поэтому я не могут говорить разумно о них или их достоинствах.
Следующее, что нужно учитывать, - это ваш API. Я понимаю, что код в вашем вопросе предназначен для примера, поэтому я буду использовать его как таковой. То, что вы ничего не сообщаете клиенту о возвращаемых данных. Это может быть массив или строка. В идеале вы должны создать некоторую структуру вокруг возвращаемых данных. Например, вы можете вернуть флаг ошибки, который указывает клиенту, если произошла ошибка.
Ваш код сервера может быть записана в виде:
<?php
$data = new stdClass;
$data->error = false;
if ($_SERVER['REQUEST_METHOD'] != 'GET') {
$data->error = true;
$data->response = 'Invalid HTTP request';
}
if (!isset($_GET['word'])) {
$data->error = true;
$data->response = 'Invalid URL parameter';
}
if (!$data->error) {
if ($_GET['word'] == 'A') {
$data->response = array('aa', 'ab', 'ac', 'ad', 'ae');
} else {
$data->response = array('bb', 'bc', 'bd', 'be', 'bf');
}
}
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);
?>
ответ с ошибкой
{
"error": true,
"response": "Invalid URL parameter"
}
Response без ошибок
{
"error": false,
"response": [
"aa",
"ab",
"ac",
"ad",
"ae"
]
}
Теперь клиентский код, если можно определить произошла ошибка и что это в виде.С помощью этого простого API я знаю, что если произошла ошибка, ответ будет строкой, описывающей ошибку. Если ошибок не было, я могу предположить, что ответ будет массивом. Что касается реальных данных, я обычно использую объекты или ассоциативные массивы, так что каждая часть данных имеет метку.
Для получения дополнительной информации см: How to Design a Good API & Why it Matters (видеолекцию)
В конце концов, Есть много способов, чтобы построить веб-сервис, так как есть люди, чтобы построить их. best путь зависит от ваших потребностей и того, насколько легко/сложно будет обновлять и поддерживать его в будущем.
Благодарим вас за подробный ответ. Я посмотрю в REST. Что произойдет, если я не использую 'header ('Content-Type: application/json; charset = utf-8');'? Какая разница? – BentCoder
Тип контента сообщает клиенту, какую информацию он якобы получает. Я думаю, что [этот ответ SO] (http://stackoverflow.com/a/9254967/911182) объясняет это лучше, чем я мог в комментарии. – Herbert