Эта «ошибка» дала мне много часов работы сверхурочных! Но я начинаю видеть его потенциальное использование (но мне хотелось бы, чтобы это было во время выполнения, все еще)
Я дам вам то, что я вижу в качестве полезного примера.
def example(errors=[]):
# statements
# Something went wrong
mistake = True
if mistake:
tryToFixIt(errors)
# Didn't work.. let's try again
tryToFixItAnotherway(errors)
# This time it worked
return errors
def tryToFixIt(err):
err.append('Attempt to fix it')
def tryToFixItAnotherway(err):
err.append('Attempt to fix it by another way')
def main():
for item in range(2):
errors = example()
print '\n'.join(errors)
main()
печатает следующие
Attempt to fix it
Attempt to fix it by another way
Attempt to fix it
Attempt to fix it by another way
Подумайте о покупке как бизнес-объект или ресурс в словаре RESTful. При этом покупка покупки фактически создает новый ресурс. Итак:
POST /api/purchase
разместит новый порядок. Детали (пользователь, автомобиль и т. Д.) Должны ссылаться на идентификатор (или URI) внутри содержимого, отправленного по этому адресу.
Не имеет значения, что заказ автомобиля - это не просто простой INSERT в базы данных. На самом деле, REST - это не просмотр ваших таблиц базы данных как операций CRUD. С логической точки зрения вы создаете заказ (покупку), но серверная сторона может выполнять столько шагов обработки, сколько захочет.
Вы даже можете даже злоупотреблять протоколом HTTP еще больше. Используйте заголовок Location
, чтобы вернуть ссылку на вновь созданный заказ, тщательно выберите коды ответов HTTP, чтобы информировать пользователей о проблемах (на сервере или на стороне клиента) и т. Д.
То, что вы действительно делаете, это создать заказ. Таким образом, добавьте еще один ресурс для заказа и сообщения и поставьте его во время процесса заказа.
Подумайте о ресурсах, а не о вызовах методов.
Чтобы завершить заказ, вероятно, вы получите POST / api / order // полный или что-то подобное.
Я чувствую, что API REST помогает в гораздо большем количестве способов, чем просто предоставление семантики. Поэтому нельзя выбирать стиль RPC только из-за некоторых вызовов, которые, похоже, имеют больше смысла в стиле RPC. Например, google maps api, чтобы найти направления между двумя местами. Выглядит так: http://maps.googleapis.com/maps/api/directions/json?origin=Jakkur&destination=Hebbal
Они могли бы назвать это «findDirections» "(глагол) и рассматривал его как операцию. Скорее они сделали «направление» (существительное) в качестве ресурса и обработали направления поиска как запрос ресурса маршрутов (хотя внутри не могло быть никакого реального ресурса, называемого направлением, и его можно было бы реализовать бизнес-логикой, чтобы найти направления на основе параметров).