Что такое API компонента

API компонента определяется не модификатором public, а цепочкой связей, начинающейся от фасада компонента.

API компонента — это множество операций, прямо или опосредованно доступных через фасад компонента, и типов, необходимых для их использования.

API компонента не включает в себя метод запуска компонента.

Каждый компонент обладает своим API.

Интерфейс компонента задаётся через Component.start(): Facade, где Facade является единственной точкой входа (см. Что такое программный компонент. API компонента — это все операции, которые достижимы из этого фасада через цепочки вызовов методов и их возвращаемые значения. Таким образом, API не задаётся списком публичных классов или интерфейсов и их методов, а получается как замыкание всех достижимых операций и классов, начиная от Facade.

Рассмотрим пример:

public interface WaterTracker {
    DailyPlan run();
}
public interface DailyPlan {

    Bottle todaysNorm();
}
public class Bottle {

    Bottle() {}

    public void drink(int ml) {
        ...
    }

    public int left() {
        ...
    }
}
public class Glass {

    public Glass() {
        ...
    }
}

Здесь фасадом является DailyPlan. Bottle является частью API, так как он достижим через через метод todaysNorm. Методы drink и left также являются частью API, поскольку достижимы через цепочку DailyPlan->Bottle. Класс Glass, хоть и обладает публичным конструктором, является самостоятельным классом и не является частью API.