Actuellement, les objets de rĂ©fĂ©rence dans Apicurio ne peuvent pointer que vers le mĂȘme document dans lequel ils sont utilisĂ©s. ImplĂ©mentez des fonctionnalitĂ©s pour permettre le rĂ©fĂ©rencement d'objets de composants Ă partir d'autres documents.
Considérations :
ProblÚmes similaires/inclus :
Cas d'utilisation
Le principal cas d'utilisation que cela rĂ©soudra est de donner aux utilisateurs la possibilitĂ© de centraliser leurs dĂ©finitions de types de donnĂ©es, peut-ĂȘtre dans un seul fichier (ou un ensemble de fichiers). Ces types de donnĂ©es peuvent ensuite ĂȘtre exploitĂ©s dans plusieurs dĂ©finitions d'API en rĂ©fĂ©rençant leur emplacement central.
Considérations
Afin de prendre en charge les références externes, un certain nombre d'améliorations sont nécessaires. Voici une liste sans ordre particulier :
La bibliothÚque de modÚles de données (actuellement oai-ts-core
mais bientĂŽt apicurio-data-models
) doit ĂȘtre amĂ©liorĂ©e pour prendre en charge un rĂ©solveur de rĂ©fĂ©rence enfichable. Actuellement, ces bibliothĂšques ne peuvent rĂ©soudre que les rĂ©fĂ©rences internes. Au lieu de cela, un consommateur de la bibliothĂšque doit ĂȘtre en mesure de fournir un rĂ©solveur de rĂ©fĂ©rence personnalisĂ© afin que les rĂ©fĂ©rences externes puissent ĂȘtre rĂ©solues avec succĂšs.
Apicurio Studio doit prendre en charge une ressource de style « type de données uniquement », avec un éditeur axé sur la conception de types de données. Cela permet un flux de travail plus spécifique pour créer/gérer des types de données indépendamment des conceptions d'API.
Lors de la définition d'un type dans l'éditeur de conception d'API, l'outillage a besoin d'un moyen de sélectionner des types à partir de ressources externes. Nous devons réfléchir à la meilleure façon d'afficher ces types externes à l'utilisateur pour la sélection. Il se peut que nous ayons besoin d'un moyen pour les conceptions d'API d'"importer" d'autres ressources/fichiers afin que l'interface utilisateur puisse affiner les choix pour l'utilisateur et les afficher judicieusement. Gardez à l'esprit que l'éditeur devra extraire et analyser toutes les ressources externes afin d'afficher leurs types de données disponibles dans une sorte de contrÎle d'interface utilisateur de sélection.
Nous devrons peut-ĂȘtre dĂ©cider si les ressources de type de donnĂ©es en cours peuvent ĂȘtre utilisĂ©es comme source de rĂ©fĂ©rences externes dans une conception d'API. En d'autres termes, devrait-il ĂȘtre possible de rĂ©fĂ©rencer des types de donnĂ©es « instantanĂ©s » dans une conception d'API ? Ou devrions-nous exiger qu'une ressource de type de donnĂ©es soit « finale » avant qu'elle puisse ĂȘtre utilisĂ©e comme source de rĂ©fĂ©rences externes. Si c'est le cas, nous ne pouvons pas « finaliser » une conception d'API tant que ses dĂ©pendances ne sont pas Ă©galement finalisĂ©es. Remarque : tout ce concept nous oblige Ă implĂ©menter des ressources de finalisation dans Apicurio !
Nous devrons dĂ©cider quel sera le format $ref lors du rĂ©fĂ©rencement des ressources Apicurio. Actuellement, toute conception d'API (ou ressource de types de donnĂ©es thĂ©oriques) a un identifiant unique, mais c'est un identifiant opaque qui est gĂ©nĂ©rĂ© lors de la crĂ©ation. Cet ID est actuellement le seul moyen unique d'identifier une ressource Ă des fins de rĂ©solution. Une fois qu'une ressource est finalisĂ©e (si nous soutenons un tel concept), nous pourrions peut-ĂȘtre accorder Ă la ressource un identifiant plus convivial et l'utiliser ensuite dans l'URI $ref. Quoi que nous fassions, il convient de noter que lors de la publication d'une ressource dans un registre d'API (une autre fonctionnalitĂ© future), toutes les rĂ©fĂ©rences $ dans la conception d'API devront ĂȘtre rĂ©solues par le registre d'API d'une maniĂšre raisonnable.
Voici quelques informations sur les valeurs autorisées pour un $ref
:
MĂȘme si la valeur d'un $ref est un URI, ce n'est pas un localisateur de rĂ©seau, seulement un identifiant. Cela signifie que le schĂ©ma n'a pas besoin d'ĂȘtre accessible Ă cet URI, mais il peut l'ĂȘtre. Il appartient essentiellement Ă l'implĂ©mentation du validateur de gĂ©rer les URI de schĂ©ma externes, mais il ne faut pas supposer que le validateur rĂ©cupĂ©rera les ressources rĂ©seau indiquĂ©es dans les valeurs $ref.
Vous trouverez plus d'informations sur les références dans la spécification OpenAPI et la RFC de référence JSON .
Serait-il possible de prioriser la mise en Ćuvre des rĂ©fĂ©rences aux DataTypes d'une autre spĂ©cification au sein d'Apicurio (plutĂŽt que des rĂ©fĂ©rences externes initialement) ?
La raison pour laquelle je dis cela est que certaines fonctionnalitĂ©s de rĂ©fĂ©rence croisĂ©e sont nĂ©cessaires pour toute utilisation non triviale de Swagger. Par exemple, nous mettons en Ćuvre divers services qui partagent des types de donnĂ©es (par exemple, des adresses, des personnes, etc.) et aimerions utiliser Apicurio pour les spĂ©cifications de tous ceux-ci. Cependant, pour le moment, nous ne pouvons pas en raison de l'impossibilitĂ© d'utiliser des rĂ©fĂ©rences croisĂ©es.
Serait-il possible de prioriser la mise en Ćuvre des rĂ©fĂ©rences aux DataTypes d'une autre spĂ©cification au sein d'Apicurio (plutĂŽt que des rĂ©fĂ©rences externes initialement) ?
La raison pour laquelle je dis cela est que certaines fonctionnalitĂ©s de rĂ©fĂ©rence croisĂ©e sont nĂ©cessaires pour toute utilisation non triviale de Swagger. Par exemple, nous mettons en Ćuvre divers services qui partagent des types de donnĂ©es (par exemple, des adresses, des personnes, etc.) et aimerions utiliser Apicurio pour les spĂ©cifications de tous ceux-ci. Cependant, pour le moment, nous ne pouvons pas en raison de l'impossibilitĂ© d'utiliser des rĂ©fĂ©rences croisĂ©es.
D'accord, cela nous amĂšnerait sur le territoire des applications tueuses.
@jsenko Il semble qu'une fois l'
J'adorerais voir cela, utiliser apicurio au travail et des références serait incroyablement utile à différentes équipes.
Je me rends compte que cela a pris un peu de temps, mais les rĂ©fĂ©rences externes seront officiellement prises en charge Ă partir de la version bĂȘta 2.46, qui est la prochaine version (sera, espĂ©rons-le, faite demain). Il existe une nouvelle interface utilisateur pour importer les types de donnĂ©es et les rĂ©ponses d'autres documents Apcurio Studio dans le document actuel. De plus, la validation a Ă©tĂ© mise Ă jour pour prendre en charge la rĂ©solution des http/s externes ainsi que les rĂ©fĂ©rences internes d'Apicurio. Cela devrait ĂȘtre un bon premier pas vers une prise en charge mature des rĂ©fĂ©rences entre les documents.
Commentaire le plus utile
Je me rends compte que cela a pris un peu de temps, mais les rĂ©fĂ©rences externes seront officiellement prises en charge Ă partir de la version bĂȘta 2.46, qui est la prochaine version (sera, espĂ©rons-le, faite demain). Il existe une nouvelle interface utilisateur pour importer les types de donnĂ©es et les rĂ©ponses d'autres documents Apcurio Studio dans le document actuel. De plus, la validation a Ă©tĂ© mise Ă jour pour prendre en charge la rĂ©solution des http/s externes ainsi que les rĂ©fĂ©rences internes d'Apicurio. Cela devrait ĂȘtre un bon premier pas vers une prise en charge mature des rĂ©fĂ©rences entre les documents.