Designbest Rest API: differenze tra le versioni

Da Webmobili Wiki.
Riga 15: Riga 15:
Nel file <code>Program.cs</code> configurare così
Nel file <code>Program.cs</code> configurare così
<syntaxhighlight lang="c#">
<syntaxhighlight lang="c#">
const string adminDocName = "v1";
const string clientsDocName = "clients";
builder.Services.AddSwaggerGen(
builder.Services.AddSwaggerGen(
opt => {
opt => {
opt.SwaggerDoc("v1", new OpenApiInfo {
// SwaggerDoc Admin
opt.SwaggerDoc(adminDocName, new() {
Title = "Designbest REST API",
Title = "Designbest REST API",
Description = "Designbest REST API",
Description = "La Designbest REST API fornisce un accesso completo e flessibile al portale leader mondiale dell'arredamento.",
Version = "v1",
Version = "v1",
Contact = new OpenApiContact { Email = "info@designbest.com", Name = "Webmobili s.r.l." }
Contact = new() { Email = "info@designbest.com", Name = "Webmobili s.r.l." }
});
});
// SwaggerDoc Client
opt.SwaggerDoc("clients", new() {
      Title = "Designbest REST API for clients",
      Description = "La Designbest REST API fornisce un'interfaccia di accesso dati completa e flessibile sul portale leader mondiale dell'arredamento.",
      Version = "v1",
      Contact = new() { Email = "info@designbest.com", Name = "Webmobili s.r.l." }
    });
var tokenService = new TokenService(builder.Configuration, builder.Environment);
var tokenService = new TokenService(builder.Configuration, builder.Environment);
opt.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme {
    const string securitySchemeName = JwtBearerDefaults.AuthenticationScheme;
    opt.AddSecurityDefinition(securitySchemeName, new() {
In = ParameterLocation.Header,
In = ParameterLocation.Header,
Description = "Please enter a valid token like " + tokenService.GetToken()?.AccessToken,
Description = "Please enter a valid token like " + tokenService.GetToken()?.AccessToken,
Riga 32: Riga 43:
Scheme = "Bearer"
Scheme = "Bearer"
});
});
opt.AddSecurityRequirement(new OpenApiSecurityRequirement {
opt.AddSecurityRequirement(new() {
{
{
new OpenApiSecurityScheme {
new() {
Reference = new OpenApiReference {
Reference = new() {
Type=ReferenceType.SecurityScheme,
Type = ReferenceType.SecurityScheme,
Id=JwtBearerDefaults.AuthenticationScheme
Id = securitySchemeName
}
          }
},
},
Array.Empty<string>()
Array.Empty<string>()
Riga 53: Riga 64:
<syntaxhighlight lang="c#">
<syntaxhighlight lang="c#">
app.UseSwagger(options => {
app.UseSwagger(options => {
options.RouteTemplate = "designbest/{documentName}/swagger.json";
  options.RouteTemplate = "designbest/{documentName}/swagger.json";
});
app.UseSwaggerUI(options => {
    options.DocumentTitle = "Designbest REST API";
options.InjectStylesheet("/css/designbest-swagger.css");
options.InjectJavascript("/js/swagger-custom.js");
options.RoutePrefix = "designbest";
options.SwaggerEndpoint("/designbest/v1/swagger.json", "Designbest REST API");
});
});
if (app.Environment.IsDevelopment() || app.Environment.IsStaging()) {
app.UseSwaggerUI(options => {
options.DocumentTitle = "Designbest REST API";
    options.InjectStylesheet("/css/designbest-swagger.css");
options.InjectJavascript("/js/swagger-custom.js");
options.RoutePrefix = "designbest";
    options.SwaggerEndpoint($"/designbest/{adminDocName}/swagger.json", "Designbest REST API"); // "v1" corrisponde al primo parametro di SwaggerDoc("v1", new() {
    options.SwaggerEndpoint($"/designbest/{clientsDocName}/swagger.json", "Designbest REST API for clients"); // "clients" corrisponde al primo parametro di SwaggerDoc("client", new() {
  });
}
// ...
// ...
app.UseStaticFiles();
app.MapStaticAssets();
</syntaxhighlight>
</syntaxhighlight>



Versione delle 16:39, 8 mag 2025

Access Token

Token valido 100 anni

Per servizi che hanno bisogno di un token fisso e non possono fare la richiesta ogni volta (es. Zapier),
ecco un token che dura 100 anni:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJkZXNpZ25iZXN0cmVzdCIsImV4cCI6NDg4Nzk0MjU5OSwiaXNzIjoid2VibW9iaWxpIiwiYXVkIjoiZGVzaWduYmVzdCJ9.Kqvuli0CAdaX5-Qn-Fxx9i01IWTjjqktwrXZOGdfZ5Q

Test

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c3IiOiJkZXNpZ25iZXN0cmVzdCIsImV4cCI6MTczMjI2OTEwMCwiaXNzIjoid2VibW9iaWxpIiwiYXVkIjoiZGVzaWduYmVzdCJ9.Vbd9m67qhx_T0DgsmSnH5Zn8Vz6j7Dxpu1vsEFyFSSk

Configurazione di Swagger

Nel file Program.cs configurare così

const string adminDocName = "v1";
const string clientsDocName = "clients";
builder.Services.AddSwaggerGen(
	opt => {
		// SwaggerDoc Admin
		opt.SwaggerDoc(adminDocName, new() {
			Title = "Designbest REST API",
			Description = "La Designbest REST API fornisce un accesso completo e flessibile al portale leader mondiale dell'arredamento.",
			Version = "v1",
			Contact = new() { Email = "info@designbest.com", Name = "Webmobili s.r.l." }
		});
		// SwaggerDoc Client
		opt.SwaggerDoc("clients", new() {
      Title = "Designbest REST API for clients",
      Description = "La Designbest REST API fornisce un'interfaccia di accesso dati completa e flessibile sul portale leader mondiale dell'arredamento.",
      Version = "v1",
      Contact = new() { Email = "info@designbest.com", Name = "Webmobili s.r.l." }
    });
		var tokenService = new TokenService(builder.Configuration, builder.Environment);
    const string securitySchemeName = JwtBearerDefaults.AuthenticationScheme;
    opt.AddSecurityDefinition(securitySchemeName, new() {
			In = ParameterLocation.Header,
			Description = "Please enter a valid token like " + tokenService.GetToken()?.AccessToken,
			Name = "Authorization",
			Type = SecuritySchemeType.Http,
			BearerFormat = "JWT",
			Scheme = "Bearer"
		});
		opt.AddSecurityRequirement(new() {
			{
				new() {
					Reference = new() {
						Type = ReferenceType.SecurityScheme,
						Id = securitySchemeName
          }
				},
				Array.Empty<string>()
			}
		});

		var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
		opt.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFile));
	}
);

e di sotto, per poter cambiare il nome dell'endpoint della documentazione in /designbest e personalizzare la grafica

app.UseSwagger(options => {
  options.RouteTemplate = "designbest/{documentName}/swagger.json";
});
if (app.Environment.IsDevelopment() || app.Environment.IsStaging()) {
	app.UseSwaggerUI(options => {
		options.DocumentTitle = "Designbest REST API";
    options.InjectStylesheet("/css/designbest-swagger.css");
		options.InjectJavascript("/js/swagger-custom.js");
		options.RoutePrefix = "designbest";
    options.SwaggerEndpoint($"/designbest/{adminDocName}/swagger.json", "Designbest REST API");	// "v1" corrisponde al primo parametro di SwaggerDoc("v1", new() {
    options.SwaggerEndpoint($"/designbest/{clientsDocName}/swagger.json", "Designbest REST API for clients");	// "clients" corrisponde al primo parametro di SwaggerDoc("client", new() {
  });
}
// ...
app.MapStaticAssets();
  • RouteTemplate, RoutePrefix e SwaggerEndpoint() sono collegati e servono a cambiare il nome default per raggiungere la url della documentazione
  • InjectStylesheet() e InjectJavascript() servono a personalizzare la grafica.
    Perché questi funzionino è necessario attivare app.UseStaticFiles(); e creare la cartella wwwroot che conterrà le cartelle css e js

  • Nel file Properties/launchSettings.json modificare i campi launchUrl con la stringa "swagger" => "designbest".