2015-03-26 3 views
0

При написании API RESTful, который должен иметь доступ к различным средам, таким как лабораторная/тестовая база данных и производственная база данных, каковы наилучшие методы создания API?Рекомендации по использованию REST API, которые обращаются к нескольким средам

Должен ли быть @PathParam:

/employee/{emp_id}/{environment} 
/{environment}/employee/{emp_id}/ 

Должен ли быть @QueryParam:

/employee/{emp_id}/?environment="test" 
/employee/{emp_id}/?environment="prod" 

Должен ли быть поле в полезной нагрузке ?:

{"emp_id":"123","environment":"test"} 
{"emp_id":"123","environment":"production"} 

ответ

1

В Я вижу два способа справиться с этим. Причина использования того или другого соответствует тому, что наиболее удобно реализовать в вашем приложении RESTful.

  • Использование параметра пути

    При таком подходе он должен быть параметром путь в самом начале пути ресурсов. Таким образом, URL-адрес будет выглядеть так: /{environment}/employee/{emp_id}. Такой подход удобен, если несколько приложений развернуты под разными корневыми путями. Например:

    /test: приложения в комплекте с конфигурацией для тестовой среды /prod: приложения в комплекте с конфигурацией для производства

    В этом случае, приложения для каждой среды изолированы.

  • Использование пользовательского заголовка

    Вы можете также пользовательский заголовок указать на какую среду маршруту. Github использует что-то подобное, чтобы выбрать версию API для использования. См. Эту ссылку: https://developer.github.com/v3/#current-version. Это не совсем то же самое, но вы могли бы иметь что-то вроде этого:

    GET /employee/{emp_id} 
    x-env: test 
    

    обратного прокси может обработать этот заголовок и маршрут запроса в правой среде.

Я не уверен в подходе в полезной нагрузке, так как поле environment действительности не является частью представления для элемента ресурса employee. Что касается подхода параметра запроса, это похоже на то, что такие параметры применимы к запросу на ресурсе.

Надеется, что это помогает вам,

+0

Я собирался написать что-то подобное, но @thierry опередил меня, так что я буду upvote Тьерри. Однако я бы не пошел по пути. Пути маршрутов могут иметь смысл при работе с версиями (хотя есть много дискуссий, если они должны быть частью пути или заголовка), поскольку он идентифицирует ресурс в контексте. Но при работе с конкретными средами я бы предложил использовать заголовок. Идеально, на самом деле должен иметь отдельный URL-адрес хоста полностью, поэтому вы никогда не рискуете испортить его, но если вы застряли, перейдите к заголовку. – deitch

+0

Большое спасибо, Avi! Я окончательно соглашаюсь с вами ;-) Мы должны быть очень осторожны, чтобы разделить такие среды.Различные URL-адреса хоста были бы даже лучше, чем заголовок ;-) –

+0

Я провел целую кучу лет, занимаясь ИТ-услугами в финансовых услугах. Админы и разработчики прикручиваются и либо вводят неправильное окно, либо отправляют неверный параметр и, таким образом, случайно удаляют производственный идентификатор или выполняют торговлю или проводят анализ на prod вместо dev, слишком сбиты с толку и болезненны. Все, что отделяет больше, хорошо в моей книге! :-) – deitch