mirror of
https://github.com/GNS3/gns3-web-ui.git
synced 2025-03-12 07:24:27 +00:00
Add methods documentation
This commit is contained in:
parent
f9cc7f3883
commit
93188f2aec
@ -3,6 +3,10 @@ import {Server} from "../../models/server";
|
|||||||
import {IExtraParams} from "./IExtraParams";
|
import {IExtraParams} from "./IExtraParams";
|
||||||
import {IGenericApiObject} from "@services/ApiInformation/IGenericApiObject";
|
import {IGenericApiObject} from "@services/ApiInformation/IGenericApiObject";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create cache to keep server information on client side
|
||||||
|
* reduce number of requests to the server
|
||||||
|
*/
|
||||||
export class ApiInformationCache {
|
export class ApiInformationCache {
|
||||||
|
|
||||||
private cache = new Map<string, IApiData>();
|
private cache = new Map<string, IApiData>();
|
||||||
|
@ -11,6 +11,10 @@ export class GetObjectIdHelper {
|
|||||||
return /{([^)]+)}/.exec(key)[1];
|
return /{([^)]+)}/.exec(key)[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* find the GET query corresponding to the key in Object list
|
||||||
|
* @param key
|
||||||
|
*/
|
||||||
public static findElementInObjectListFn(key): (data: IApiObject[]) => IApiObject {
|
public static findElementInObjectListFn(key): (data: IApiObject[]) => IApiObject {
|
||||||
return function findElement(data: IApiObject[]): IApiObject {
|
return function findElement(data: IApiObject[]): IApiObject {
|
||||||
const elem = data.find(d => d.name === key);
|
const elem = data.find(d => d.name === key);
|
||||||
@ -21,6 +25,12 @@ export class GetObjectIdHelper {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the request, append the value if required
|
||||||
|
* @param server
|
||||||
|
* @param value
|
||||||
|
* @param extraParams
|
||||||
|
*/
|
||||||
public static buildRequestURL(server: Server, value: string, extraParams: IExtraParams[]): (elem) => string {
|
public static buildRequestURL(server: Server, value: string, extraParams: IExtraParams[]): (elem) => string {
|
||||||
return (elem): string => {
|
return (elem): string => {
|
||||||
let url = `${server.protocol}//${server.host}:${server.port}${elem.path}`;
|
let url = `${server.protocol}//${server.host}:${server.port}${elem.path}`;
|
||||||
@ -37,6 +47,13 @@ export class GetObjectIdHelper {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map the data from server to a generic response object
|
||||||
|
* @param key
|
||||||
|
* @param extraParams
|
||||||
|
* @param service
|
||||||
|
* @param server
|
||||||
|
*/
|
||||||
public static createResponseObject(key: string,
|
public static createResponseObject(key: string,
|
||||||
extraParams: IExtraParams[],
|
extraParams: IExtraParams[],
|
||||||
service: ApiInformationService,
|
service: ApiInformationService,
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
/**
|
||||||
|
* key value association to query the api documentation
|
||||||
|
* ex : {key: 'project_id', value: 'd6381517-4ac6-436e-bff7-b667dd64f693'}
|
||||||
|
*/
|
||||||
export interface IExtraParams {
|
export interface IExtraParams {
|
||||||
key: string;
|
key: string;
|
||||||
value: string;
|
value: string;
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* {id: 'project_id, name: 'test project'}
|
||||||
|
*/
|
||||||
export interface IGenericApiObject {
|
export interface IGenericApiObject {
|
||||||
id: string;
|
id: string;
|
||||||
name?: string;
|
name?: string;
|
||||||
|
@ -22,6 +22,15 @@ import {IExtraParams} from "@services/ApiInformation/IExtraParams";
|
|||||||
import {ApiInformationCache} from "@services/ApiInformation/ApiInformationCache";
|
import {ApiInformationCache} from "@services/ApiInformation/ApiInformationCache";
|
||||||
import {IGenericApiObject} from "@services/ApiInformation/IGenericApiObject";
|
import {IGenericApiObject} from "@services/ApiInformation/IGenericApiObject";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* representation of an APi endpoint
|
||||||
|
* {
|
||||||
|
* methods: ['GET', 'DELETE', 'PUT'],
|
||||||
|
* originalPath: '/v3/projects/{project_id}',
|
||||||
|
* path: '/projects/{project_id}',
|
||||||
|
* subPaths: ['projects', '{project_id}'],
|
||||||
|
}
|
||||||
|
*/
|
||||||
export interface IPathDict {
|
export interface IPathDict {
|
||||||
methods: ('POST' | 'GET' | 'PUT' | 'DELETE' | 'HEAD' | 'PATH')[];
|
methods: ('POST' | 'GET' | 'PUT' | 'DELETE' | 'HEAD' | 'PATH')[];
|
||||||
originalPath: string;
|
originalPath: string;
|
||||||
@ -29,6 +38,10 @@ export interface IPathDict {
|
|||||||
subPaths: string[];
|
subPaths: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* name: 'node_id',
|
||||||
|
* path: '/projects/{project_id}/nodes/{node_id}
|
||||||
|
*/
|
||||||
export interface IApiObject {
|
export interface IApiObject {
|
||||||
name: string;
|
name: string;
|
||||||
path: string;
|
path: string;
|
||||||
@ -76,6 +89,11 @@ export class ApiInformationService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate a list of object from the OpenAPi GNS3 documentation with the GET path to query it
|
||||||
|
* @param openapi GNS3 openapi json data
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
private apiObjectModelAdapter(openapi: any): IApiObject[] {
|
private apiObjectModelAdapter(openapi: any): IApiObject[] {
|
||||||
|
|
||||||
function haveGetMethod(path: string): boolean {
|
function haveGetMethod(path: string): boolean {
|
||||||
@ -105,6 +123,11 @@ export class ApiInformationService {
|
|||||||
.filter((object) => haveGetMethod(object.path));
|
.filter((object) => haveGetMethod(object.path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert OpenAPi json file from GNS3 api documentations to usable information schema
|
||||||
|
* @param openapi GNS3 openapi definition
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
private apiPathModelAdapter(openapi: any): IPathDict[] {
|
private apiPathModelAdapter(openapi: any): IPathDict[] {
|
||||||
const keys = Object.keys(openapi.paths);
|
const keys = Object.keys(openapi.paths);
|
||||||
return keys
|
return keys
|
||||||
@ -122,7 +145,10 @@ export class ApiInformationService {
|
|||||||
}) as unknown as IPathDict[];
|
}) as unknown as IPathDict[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return availables methods for a path
|
||||||
|
* @param path '/v3/projects/{project_id} => ['GET', 'POST', 'PUT']
|
||||||
|
*/
|
||||||
getMethods(path: string): Observable<Methods[]> {
|
getMethods(path: string): Observable<Methods[]> {
|
||||||
return this.getPath(path)
|
return this.getPath(path)
|
||||||
.pipe(
|
.pipe(
|
||||||
@ -136,6 +162,10 @@ export class ApiInformationService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return a list of matching path
|
||||||
|
* @param path '/v3/projects/{project_id}'
|
||||||
|
*/
|
||||||
getPath(path: string): Observable<IPathDict[]> {
|
getPath(path: string): Observable<IPathDict[]> {
|
||||||
return this.data
|
return this.data
|
||||||
.asObservable()
|
.asObservable()
|
||||||
@ -172,6 +202,11 @@ export class ApiInformationService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return all available next child for a given path
|
||||||
|
* @param path api path
|
||||||
|
*/
|
||||||
|
|
||||||
getPathNextElement(path: string[]): Observable<string[]> {
|
getPathNextElement(path: string[]): Observable<string[]> {
|
||||||
|
|
||||||
return this.getPath(path.join('/'))
|
return this.getPath(path.join('/'))
|
||||||
@ -187,6 +222,14 @@ export class ApiInformationService {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return all keys which composed a path
|
||||||
|
* @param path '/v3/projects/7fed4f19-0c45-4461-a45b-93ff11ccdae6/nodes/62f3e04b-a22c-452a-a026-1971122d9d8a
|
||||||
|
* return: [
|
||||||
|
* {key:'project_id', value: '7fed4f19-0c45-4461-a45b-93ff11ccdae6'},
|
||||||
|
* {key:'node_id', value: '62f3e04b-a22c-452a-a026-1971122d9d8a'}
|
||||||
|
* ]
|
||||||
|
*/
|
||||||
getKeysForPath(path: string): Observable<{ key: string; value: string }[]> {
|
getKeysForPath(path: string): Observable<{ key: string; value: string }[]> {
|
||||||
return this.getPath(path)
|
return this.getPath(path)
|
||||||
.pipe(map((paths: IPathDict[]) => {
|
.pipe(map((paths: IPathDict[]) => {
|
||||||
@ -204,7 +247,14 @@ export class ApiInformationService {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
getListByObjectId(server: Server, key: string, value?: string, extraParams?: IExtraParams[]) {
|
/**
|
||||||
|
* get the value of specific object with his ID
|
||||||
|
* @param {server} the server object to query
|
||||||
|
* @param {key} to query ex :'node_id'
|
||||||
|
* @param {value} generally the object uuid
|
||||||
|
* @param {extraParams} somes params like the project_id if you query specific node_id
|
||||||
|
*/
|
||||||
|
getListByObjectId(server: Server, key: string, value?: string, extraParams?: IExtraParams[]): Observable<IGenericApiObject[]> {
|
||||||
|
|
||||||
const cachedData = this.cache.get(server, key, value, extraParams);
|
const cachedData = this.cache.get(server, key, value, extraParams);
|
||||||
if (cachedData) {
|
if (cachedData) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user