  Enterprise applications are often built as service-oriented architectures,
where the individual services are designed to perform specific functions and
interact with each other by means of well-defined APIs (Application Programming
Interfaces). The architecture of an enterprise application evolves over time,
in order to adapt to changing business requirements. This evolution might
require changes to the APIs offered by services, which can be achieved through
appropriate API refactorings.
  Previous studies on API refactoring focused on the effects on API
definitions, with general considerations on related forces and smells. So far,
instead, the development strategy for realising these refactorings has received
little attention. This paper addresses exactly this aspect.
  We introduce a conceptual framework for the implementation of API
refactorings. Our framework elicits that there are important trade-offs and
choices, which significantly affect the efficiency, maintainability, and
isolation properties of the resulting architecture. We validate our framework
by implementing several refactorings that introduce established API patterns
with different choices, which illustrates the guiding principles offered by our
framework. Our work also elicits, for the first time, how certain programming
language features can reduce friction in applying API refactoring and open up
more architectural choices.
