Я использовал эту конечную точку API REST в коде
public static void Foo(string organization, string project, string buildId, string artifactName, IWorkerInstrumentation instrumentation)
{
string artifactUrl = $"https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version=4.1";
// Further code that calls the above endpoint
// Irrelevant to the discussion
}
И получил предложение, следующее:
Эти строковые константы и патентованные шаблоны URL должны быть изолированы в центральномместо, которое облегчает их обновление, если они меняются.
Я немного подумал об этом, и чувствую, что этот URL-адрес генерируется динамически на основе параметров, передаваемых в эту функцию, и поэтому не можетиметь полный URL-адрес в файле констант.
Самое близкое, что я мог придумать, - это иметь функцию, которая генерирует этот URL-адрес на основе переданных параметров, и иметь определенные части основы URL-адреса, полученные из констант.файл, как показано ниже.
Класс помощника
public static class AzureDevOpsAPIHelper
{
public static string GenerateArtifactDownloadUrl(string organization, string project, string buildId, string artifactName)
{
return AzureDevOpsConstants.AzureDevOpsApiBaseUrl + "/" + organization + "/" + project + AzureDevOpsConstants.AzureDevOpsBuildsSubUrl + "/" + buildId + "/" + AzureDevOpsConstants.AzureDevOpsArtifactsSubUrl + artifactName + AzureDevOpsConstants.AzureDevOpsArtifactsApiVersion;
}
}
Файл констант
public static class AzureDevOpsConstants
{
/**
* The constants used by the Azure Dev Ops API helper to generate REST API endpoints to talk to Azure Dev Ops
*/
public static readonly string AzureDevOpsApiBaseUrl = "https://dev.azure.com/";
public static readonly string AzureDevOpsBuildsSubUrl = "_apis/build/builds";
public static readonly string AzureDevOpsArtifactsSubUrl = "artifacts?artifactName=";
public static readonly string AzureDevOpsArtifactsApiVersion = "&api-version=4.1";
}
Исходный файл API
string artifactUrl = AzureDevOpsAPIHelper.GenerateArtifactDownloadUrl(organization, project, buildId, artifactName);
Я не уверен, какполезно этоМожет ли кто-нибудь предложить альтернативный / более правильный подход к комментарию, который я разместил выше.