Si l'une de vos API est particulièrement complexe, vous pouvez la mettre en œuvre à partir de plusieurs classes Java. Pour que différentes classes fassent partie de la même API, vous devez :
- attribuer à chaque classe les mêmes chaînes
nameetversiondans son annotation@Api; - ajouter des API de classe sous forme de liste d'éléments séparés par une virgule dans
web.xml.
Par exemple, les deux classes suivantes font toutes les deux partie de l'API tictactoe :
@Api(name = "tictactoe", version = "v1")
class TicTacToeA { … }
@Api(name = "tictactoe", version = "v1")
class TicTacToeB { … }
La configuration de l'API est spécifiée via les propriétés de l'annotation @Api.
Toutefois, dans le cas des API multiclasses, les exigences de l'annotation @Api vont au-delà du simple partage de la même valeur pour name et version dans l'annotation @Api de chaque classe. En fait, votre API backend ne fonctionnera pas s'il existe la moindre différence dans les configurations d'API spécifiées dans les propriétés @Api des classes. Toute différence au sein des propriétés @Api dans une API multiclasse entraîne une configuration "ambiguë" de l'API, qui ne fonctionnera pas dans Cloud Endpoints Frameworks pour App Engine.
Il existe plusieurs façons de créer une API multiclasse et non ambiguë :
- Vérifiez manuellement que toutes les classes d'une API ont exactement les mêmes propriétés d'annotation
@Api. - Utilisez l'héritage d'annotation via la fonctionnalité d'héritage Java.
Ainsi, toutes les classes d'une API héritent de la configuration d'API d'une classe de base commune définie par l'annotation
@Api. - Utilisez l'héritage d'annotation
@ApiReferencesur toutes les classes d'une même API afin qu'elles référencent la même configuration d'API d'une classe commune définie par l'annotation@Api.
Utiliser @ApiClass pour les propriétés pouvant différer entre des classes
Pour utiliser cette fonctionnalité, vous avez besoin de l'importation suivante :
import com.google.api.server.spi.config.ApiClass;
Bien que toutes les propriétés de l'annotation @Api doivent correspondre pour toutes les classes d'une API, vous pouvez également utiliser l'annotation @ApiClass pour fournir des propriétés qui ne doivent pas nécessairement être identiques entre les classes. Par exemple :
// API methods implemented in this class allow only "clientIdA".
@Api(name