В настоящее время мы думаем о том, как разработать интерфейс для других систем.
Мой коллега хотел бы реализовать универсальный интерфейс (например, doIt (JSONArray)), где вы помещаете нужную информацию, которую хотели бы сделать, в JSONObject, чтобы вызовы, например, выглядеть так:
doIt('{"method":"getInformation", "id":"1234", "detailLevel": "2"}')
doIt('{"method":"getEmployeeInfo", "EmployeeId":"4567", "company": "Acme Inc."}')
(я использовал «и» в этом примере только для демонстрационных целей. Я знаю, что мне пришлось избежать «в реальной системе»).
Этот метод затем будет доступен через http, так что я хотел бы http://mysite/doIt?parm={JSONObject}
Мой подход заключается в использовании различных интерфейсов с соответствующими параметрами, чтобы у меня был интерфейс getInformation(1234,2)
и getEmployeeInfo(4567,"Acme Inc.")
. Так что для доступа через http моя схема будет выглядеть так: http://mysite/getInformation?id=1234&detailLevel=2
и http://mysite/getEmployeeInfo?employeeId=4567&company=acmeinc.
Для клиентов, обращающихся к нашему сервису, мы хотим предоставить специальные библиотеки, которые инкапсулируют поведение. Например. будет клиент java-lib, который переводит вызов клиента getEmployeeInfo (..) либо в
http://mysite/doIt?parm={'{"method":"getEmployeeInfo", "EmployeeId":"4567", "company": "Acme Inc."}'}
или
http://mysite/getEmployeeInfo?employeeId=4567&company=acmeinc.
и затем вернуть результат.
Так что для клиентов будет полностью прозрачно, как работает бэкэнд, если они используют библиотеку, которая обрабатывает «перевод».
Как вы думаете, каковы плюсы и минусы каждой идеи? Мне больше нравится мой подход, потому что он выглядит «чище». Но с этим чувством трудно спорить. Возможно, вы можете дать мне (или ему) некоторые мысли о дизайне, а также коснуться областей (масштабируемость, безопасность, ...) или предоставить полезные ссылки по этому вопросу