Я разрабатываю API для библиотеки, которая будет использоваться клиентом.
Библиотека должна предоставлять единый интерфейс для доступа к нескольким удаленным ресурсам. Итак, я должен создать API и несколько его реализаций (соответствует количеству удаленных ресурсов).
Я столкнулся со следующей проблемой: все ресурсы, кроме одного, имеют API для входа в систему. Итак, я могу создать метод
void authenticate (String login, String password) throws AuthenticationException;
Но я не могу передать аутентификацию этому одному ресурсу с помощью этого метода.
Чтобы пройти аутентификацию на этом ресурсе, мне нужно выполнить некоторые действия и получить URL для аутентификации, затем я должен передать этот URL вызывающему, программа-вызывающая программа использует некоторую магию для прохождения аутентификации, а после этого должна вернуть мне поток».
Так что теперь мне нужно еще 2 метода для достижения необходимого результата:
String getAuthenticationURL () throws AuthenticationException;
void postAuthentication () throws AuthenticationException;
Если я добавлю эти методы в API, мне придется создавать их пустые реализации (или реализации, которые выдают исключение RuntimeException) во всех реализациях API для «обычных» ресурсов.
Если я не добавлю их в API, а добавлю их только в одну конкретную реализацию, тогда я нарушу саму идею унифицированного API.
Подход с этими двумя методами - только одно из по крайней мере нескольких возможных решений. Так что любые советы и предложения приветствуются.