2015-04-18 2 views
0

Короче говоря, я хочу, чтобы создать эти RESTful API конечных точекКак добавить POST/payments /: id/execute в Spring Data Rest?

  1. POST /payments
  2. GET /payments/:id
  3. POST /payments/:id/execute => Заряжает плательщик & изменяет status к executed.

В 1st и 2nd конечных точек может быть легко решена, но как реализовать 3rd?

+0

Как может быть POST/payments /: id/execute' когда-либо RESTful? – zeroflagL

+0

@zeroflagL На самом деле, я следую API-интерфейсу PayPal REST. Перейдите на страницу https://developer.paypal.com/docs/api/#execute-an-approved-paypal-payment. Кроме того, Stripe делает аналогичную вещь https://stripe.com/docs/api#capture_charge. Как PayPal & Stripe заявляют, что их API API REST –

+0

Спасибо за обновление, теперь это имеет больше смысла. Это интересный выбор дизайна. Для меня более понятным было бы что-то вроде «POST/payments /: id/transaction». Решение выглядит скорее как услуга, чем «обычный» ресурс. Вот почему я думаю, что было бы лучше (и, может быть, проще) создать контроллер для этого действия. Чтобы реализовать его с помощью Spring Data REST, вам понадобится независимый ресурс 'execute' afaik, и это не имеет большого смысла. – zeroflagL

ответ

1

Если вы хотите сделать что-то другое, кроме CRUD-операций с Spring Data REST, вам нужно будет использовать Spring MVC до define a custom controller. Логика обработки будет идти внутри контроллера, и вы будете обрабатывать любую экономию ресурсов самостоятельно с помощью репозитория.

Альтернативная идея для чего-то более весеннего-данных-стиля отдыха (и я не тестировал это) - использовать Spring Data REST events. Это напрямую подключается к системе и может позволить вам выполнять дополнительную работу, не определяя собственный контроллер/etc.

@RepositoryEventHandler 
public class TransactionEventHandler { 

    @HandleBeforeSave 
    public void handlePersonSave(Transaction incoming) { 
    // call paypal, stripe, etc 
    // flag incoming transaction as unsuccessful if the underlying transaction failed 
    } 
} 
Смежные вопросы