Как спроектировать / написать API "interface-to-other-APIs"? - PullRequest
0 голосов
/ 09 ноября 2018

В настоящее время у меня есть 2 похожих API, но они также сильно различаются по реализации (допустим, они зависят от проекта), для пояснения я буду называть их API_utilities_project1.py и API_utilities_project2.py.

Эти API являются частью большей структуры, которая также "размещает" скрипты, которые собираются использовать эти API. В зависимости от определенного «проекта» в структуре, сценарии собираются использовать один из этих API. Также сценарии могут быть либо специфичными для проекта, либо они могут быть общими / многократно используемыми во всех проектах (это означает, что некоторые сценарии не будут использоваться / разрешены в некоторых "проектах").

Я хотел создать API-оболочку под названием API_utilities.py вокруг API_utilities_project1.py и API_utilities_project2.py. Таким образом, сценарии могут импортировать API_utilities.py независимо от проекта (нет необходимости проверять в сценариях, какой проект определен в платформе и на основе этого импорта либо первый, либо второй API) -> логика импорта будет обрабатываться в API_utilities.py ,

Проблема заключается в том, что и в API_utilities_project1.py, и в API_utilities_project2.py нет необходимости реализовывать функции, вызываемые одинаково. Поэтому я не могу просто создать интерфейсы для этих функций в API_utilities.py. Единственный способ, с помощью которого я до сих пор работал, это:

API_utilities_project1.py

def foo():
    print 'foo'

API_utilities_project2.py

def bar():
    print 'bar'

API_utilities.py

if fwk.project=='project1':
    from API_utilities_project1 import *
elif fwk.project=='project2':
    from API_utilities_project2 import *
else:
    print 'error message / exception or whatnot'


def same():
        print 'same functionality'

script1.py ('project1' определен в платформе)

import API_utilities as API

API.foo()
API.same()

script2.py ('project2' определен в платформе)

import API_utilities as API

API.bar()
API.same()

Есть ли более чистый способ написания API_utilities.py, чем при использовании from ... import *?

...