Создание какого-либо успокоительного API только с четырьмя методами HTTP? - PullRequest
3 голосов
/ 06 ноября 2010

В данный момент я пытаюсь создать полноценный серверный фреймворк HTTP.

Я прочитал книгу под названием "Restful webservices", и это положило начало некоторой работе в этой области.

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

Неужели нельзя сказать, что все является объектом.Автомобиль, ручка, книга и даже абстрактные вещи, такие как идея и концепция, могут быть объектом.Потому что слово «объект» - это просто человеческое изобретение для «чего-то».

Не могли бы вы также сказать, что каждое «что-то» - это ресурс.Монета, компьютер и даже долг могут быть ресурсом.Но вопрос к кому.Долг - это ресурс, но не для того, кто должен, а для того, кому он должен.То же самое с человеческими остатками.Они - ресурсы, но не для нас, а для матери-природы, потому что она требует баланса - внутри и снаружи - основ науки (программирования).

Ресурсы (объекты) кажутся существительными.Как насчет прилагательного и глаголов?На самом деле кажется, что все можно описать с помощью существительных.Например:

  • Прилагательное: Автомобиль красного цвета
  • Существительное: Автомобиль имеет красный цвет
  • Прилагательное: Я устал
  • Существительное:У меня усталость
  • Глагол: я убиваю его
  • Существительное: я создаю убийство
  • Глагол: я целую ее
  • Существительное: я создаю поцелуй

Это означает, что ресурс = объект = существительное.Одно и то же «что-то» с разных точек зрения.

Может быть, есть глаголы и прилагательные, у которых нет существительного эквивалента, но тогда это лишь недостаток в человеческом языке, а не в самой концепции.

Итак, вернемся к тому, с чего все это началось.

Когда я действительно подумал, что есть только 4 (я знаю, что есть еще несколько) HTTP-глагола - POST, GET, PUT, DELETE - я чувствовал, что это не можетсоздавать мощные релакс-API, потому что они ограничивают API базовыми операциями CRUD.Но после некоторых чтений и размышлений я понял, что все - это просто ресурсы, которые можно создавать, читать, изменять или удалять.Вроде бы и снаружи, простые правила, но все же мощные для создания чего-либо.

Но потом я подумал, что есть только «внутри» и «снаружи».Может быть, есть только «создать» и «удалить».Потому что GET и PUT - это глаголы, которые можно заменить словами «создать чтение» и «создать изменение».

Все это только я играю с идеями основ матери-природы.Вход и выход, создание и удаление.Первый уже широко принят в области программирования.Но последнее вы не слышите об этом слишком много.Но если это правильно, то это означает, что HTTP Restful API можно использовать для создания чего-либо, правильным способом, не взламывая его с помощью модифицированных версий (помещая глаголы в uri, тело запроса и т. Д.), А только используя POST,GET, PUT, DELETE.

Мы просто должны преобразовать все методы в ресурсы / объекты.Вместо:

result = Books.search("Foo");

мы должны подумать:

result = Search.create(Books, "Foo");

Что вы думаете об этом?Имея это в виду, можно ли создавать какие-либо успокоительные API только с четырьмя методами HTTP?Являются ли «создавать» и «удалять» еще один закон природы?

Ответы [ 5 ]

1 голос
/ 06 ноября 2010

Я думаю, что вы связываете два разных аспекта успокоительного API.Сокращение HTTP-методов до простых IN и OUT уже выполняется запросом и ответом.Конечно, вы можете сопоставить чтение с GET и PUT для создания, но как насчет DELETE?Это "PUT of 0"?Если это так, то вам требуется логика для обработки этого случая.

Например, когда вы открываете документ в текстовом редакторе, вы выполняете операцию IN в ОС, а ОС выполняет и операцию OUT длятекстовый редактор.Для сохранения документа верно обратное.

Но это всего лишь простая механика ведения домашнего хозяйства.Конечно, текстовый редактор может маскировать IN с помощью GET и OUT с помощью PUT, как в «сохранить как», но как насчет DELETE?Для этого потребуется собственный глагол или перегрузка действия PUT / OUT в ОС.Тогда есть POST, который эквивалентен сохранению *.Мы перегружаем метод PUT, чтобы проверить, существует ли файл?Почему бы просто не использовать его как свой собственный глагол?

Если вы собираетесь сократить до простого IN и OUT, то вам придется перегружать OUT:

if(OUT){
    if(file_exists) update_file
    else if(file_size==0) delete_file
    else create_file
}

* Я говорюболее теоретически, конечно, zzzzBov прав в своем посте о спецификации HTTP.

1 голос
/ 06 ноября 2010

Но тогда я подумал, что есть только «внутри» и «снаружи».Может быть, есть только «создать» и «удалить».Потому что GET и PUT - глаголы, которые можно заменить словами «создать чтение» и «создать изменение».

Вы можете сделать это.Вы можете пойти еще дальше и делать все с POST.Затем вы можете иметь конверт внутри вашего HTTP-запроса, в котором указано, какую операцию вы хотите выполнить.Вы даже можете иметь только одну конечную точку и выполнять столько же операций в зависимости от содержимого вашего HTTP-запроса.Вы можете иметь createBook, updateBook, getAllBooks и т. Д.

И у вас есть SOAP.

Как человек, которому приходилось создавать, поддерживать и кодировать веб-службы SOAP и RESTful, сделайте себе (и всем остальным) услугу и используйте REST.

1 голос
/ 06 ноября 2010

Вы можете создать любую систему, используя только два метода, GET и POST, приравняв GET = Read и POST = Write.Другие методы просто помогают добавить некоторую видимость к запросам.

Если вы действительно хотите попытаться смоделировать запрос REST с точки зрения объектов, я бы сделал это:

result = new Search(Books,"Foo").Get();

ОднакоЯ не уверен, что это отображение особенно ценно.

1 голос
/ 06 ноября 2010

RESTful API - это, по сути, интерфейс к некоторому хранилищу данных: БД, файловая система, распределенная хеш-таблица и т. Д.Это означает, что вам действительно не нужны пользовательские глаголы (в любом случае стандартные интерфейсы обычно лучше), потому что вы можете сделать все, используя GET, PUT, POST и DELETE.

Также важно отметить, что RESTful API в частности призывает использовать существующие методы HTTP для ресурсов CRUD.Кроме того, API не должны быть сложными или подробными, чтобы быть полезными или даже мощными.В большинстве случаев простота - ваш друг.Простые структуры и простые интерфейсы во многих случаях выполняют работу намного лучше, чем эквивалентные сложные структуры / интерфейсы.Посмотрите, например, на git, структуры данных, которые он использует, очень, очень просты, и, как следствие, git очень, очень, быстр.

Что касается вашего вопроса: да, люди делают это все время иэто работает!

0 голосов
/ 06 ноября 2010

GET, POST, PUT и DELETE не имеют прямого отношения к созданию, чтению, обновлению и удалению.Они часто могут, но важно отметить, что POST и PUT могут выполнять функции обновления и создания.

http://en.wikipedia.org/wiki/POST_%28HTTP%29

метод POST должен использоваться для любого контекста взапрос неидемпотентен

Это означает, что POST следует использовать для любой функции, которая изменяет состояние сервера (данных), а GET, PUT и DELETE следует использовать для любых функций, которыеизменить состояние сервера.

РЕДАКТИРОВАТЬ:Чтобы ответить на вопрос: да.Есть несколько решений, которые я видел для создания полноценного API с заголовками HTML.Все они сводятся к использованию структуры каталогов и правильных заголовков HTML.

http://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...