Quelle est la différence entre l' interface SPI (Service Provider Interface) et l' API (Application Programming Interface) ?
Plus spécifiquement, pour les bibliothèques Java, qu'est-ce qui fait d'elles une API et / ou une SPI?
Quelle est la différence entre l' interface SPI (Service Provider Interface) et l' API (Application Programming Interface) ?
Plus spécifiquement, pour les bibliothèques Java, qu'est-ce qui fait d'elles une API et / ou une SPI?
Autrement dit, l'API vous dit ce qu'est une classe spécifique/méthode fait pour vous et la SPI vous indique ce que vous devez faire pour se conformer.
Parfois, SPI et de l'API se chevauchent. Par exemple, dans JDBC l' Driver
classe est partie de la SPI: Si vous souhaitez simplement utiliser JDBC, vous n'avez pas besoin de l'utiliser directement, mais tout le monde qui met en œuvre un pilote JDBC doit mettre en œuvre cette classe.
L' Connection
interface sur l'autre main est à la fois SPI et de l'API: Vous l'utilisez régulièrement lorsque vous utilisez un pilote JDBC et il doit être implémentée par le développeur du pilote JDBC.
De Efficace Java 2nd Edition:
Un fournisseur de services framework est un système dans lequel de multiples services les fournisseurs de mettre en œuvre un service, et le système rend les implémentations à la disposition de ses clients, le découplage de la mise en œuvre.
Il y a trois composantes essentielles d'un fournisseur de services framework: un interface de service, fournisseurs de la mise en œuvre; un fournisseur d'inscription API, qui utilise le système pour s'inscrire implémentations, offre à ses clients l'accès et d'un accès au service d'API, dont les clients utilisent pour obtenir un instance du service. Le service l'accès API permet en général mais ne ne pas demander au client de spécifier certains critères de choix d'un fournisseur. Dans l'absence d'une telle spécification, l'API renvoie une instance d'une défaut de mise en œuvre. Le service accès à l'API est la "flexibilité statique usine" qui est à la base de la fournisseur de services-cadre.
Une quatrième composante de l' fournisseur de services-cadre est un interface du fournisseur de services, qui fournisseurs à mettre en œuvre pour créer les instances de leur service la mise en œuvre. En l'absence d'un interface du fournisseur de services, les implémentations sont enregistrés par nom de la classe et instancié reflectively (Point 53). Dans le cas de JDBC, Connexion joue le rôle de la interface de service, DriverManager.registerDriver est l' l'inscription du fournisseur de l'API, DriverManager.getConnection est l' l'accès au service d'API, et le Conducteur est l' interface du fournisseur de services.
Il existe de nombreuses variantes de la fournisseur de services-cadre modèle. Par exemple, le service d'accès de l'API peut renvoyer une riche interface de service que celle du fournisseur, à l'aide de l'Adaptateur [Gamma95, p. 139]. Voici un exemple simple de mise en œuvre avec une interface du fournisseur de services et un fournisseur par défaut:
// Service provider framework sketch
// Service interface
public interface Service {
... // Service-specific methods go here
}
// Service provider interface
public interface Provider {
Service newService();
}
// Noninstantiable class for service registration and access
public class Services {
private Services() { } // Prevents instantiation (Item 4)
// Maps service names to services
private static final Map<String, Provider> providers =
new ConcurrentHashMap<String, Provider>();
public static final String DEFAULT_PROVIDER_NAME = "<def>";
// Provider registration API
public static void registerDefaultProvider(Provider p) {
registerProvider(DEFAULT_PROVIDER_NAME, p);
}
public static void registerProvider(String name, Provider p){
providers.put(name, p);
}
// Service access API
public static Service newInstance() {
return newInstance(DEFAULT_PROVIDER_NAME);
}
public static Service newInstance(String name) {
Provider p = providers.get(name);
if (p == null)
throw new IllegalArgumentException(
"No provider registered with name: " + name);
return p.newService();
}
}
La différence entre l'API et le SPI vient lorsque l'API fournit également certains des implémentations concrètes. Dans ce cas, le prestataire de services doit mettre en œuvre quelques Api(appelé SPI)
Un exemple est JNDI:
JNDI fournit des interfaces et de classes pour le contexte de recherche. Par défaut, la recherche d'un contexte est fourni dans IntialContext. Cette classe interne sera d'utiliser des interfaces SPI (à l'aide de NamingManager) pour le fournisseur d'implémentations spécifiques.
Voir le JNDI de l'Architecture ci-dessous pour mieux comprendre.
API représente Application Programing Interface API est un moyen pour accéder à une fonction ou service fourni par une sorte de logiciel ou une plate-forme.
SPI représente Interface du Fournisseur de Services, où l'ips est une façon d'injecter, de prolonger ou de modifier le comportement d'un logiciel ou d'une plate-forme.
L'API est normalement cible pour les clients d'accéder à un service et à ses a les propriétés suivantes:
-->API est un moyen via un programme d'accès à un service pour atteindre un certain comportement ou de sortie
-->À partir de l'API de l'évolution de point de vue, l'addition est pas du tout un problème pour les clients
-->Mais l'API est encore une fois utilisé par les clients il ne peut pas (et ne doit pas) être modifiés / supprimés sauf si il y a une bonne communication, depuis sa une dégradation complète de la client en attente
SPI sur l'autre partie sont ciblées pour les fournisseurs et présente les propriétés suivantes:
-->SPI est une façon d'étendre ou modifier le comportement d'un logiciel ou d'une plate-forme (programmable vs programmatique)
-->SPI évolution est différente que le SPI de l'évolution, à l'ips de suppression n'est pas un problème
-->Ajout d'interfaces SPI de causer des problèmes et peut casser implémentations existantes
Pour plus d'explications, cliquez ici : Interface du Fournisseur de Services
NetBeans FAQ: qu'est Ce qu'un SPI? Comment est-il différent à partir d'une API?
API est un terme général un acronyme pour Interface de Programmation d'Application - cela signifie quelque chose (en Java, généralement des classes Java) d'un morceau de logiciel expose, ce qui permet à d'autres logiciels de communiquer avec elle.
SPI représente Interface du Fournisseur de Services. C'est un sous-ensemble de toutes les choses qui peuvent être une API spécifique à des situations où une bibliothèque est de fournir des cours qui sont appelés par l'application (ou de l'API de la bibliothèque), et qui, en général, de changer les choses que l'application est capable de faire.
L'exemple classique est JavaMail. Son API a deux côtés:
- L'API secondaires que vous appelez si vous êtes à la rédaction d'un client de messagerie ou l'envie de lire un de boîtes aux lettres
- Le SPI côté si vous fournissez un fil-gestionnaire de protocole pour permettre JavaMail pour parler à un nouveau type de serveur, comme une nouvelle ou un serveur IMAP
Les utilisateurs de l'API rarement besoin de le voir ou de parler à la SPI classes, et vice-versa.
Dans NetBeans, quand vous voyez le terme de SPI, il est généralement de parler de classes qu'un module peut injecter au moment de l'exécution qui permettent de NetBeans pour faire de nouvelles choses. Par exemple, il existe un SPI pour la mise en œuvre de systèmes de contrôle de version. Les différents modules de fournir des implémentations de SPI pour CVS, Subversion, Mercurial et d'autres systèmes de contrôle de révision. Toutefois, le code qui traite les fichiers (l'API de côté) n'a pas besoin de soins si il y a un système de contrôle de version, ou ce qu'il en est.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.