Named Credentials и Custom Setting

Named Credentials и Custom Setting

Подскажите кто использовал Named Credentials для Basic Auth
есть метод:

public HttpResponse postContragent(String body) {

HttpRequest request = new HttpRequest();
request.setMethod(POST);
request.setBody(body);
request.setHeader('content-type', 'application/json');
request.setTimeout(120000);
request.setEndpoint('callout:JIRA');
HttpResponse response = new Http().send(request);
if (response.getStatusCode() != 200) {
throw new ClientException('\nendpoint = ' + request.getEndpoint() +
'\nendpoint = ' + 'callout:JIRA' +
'\nauthorizationHeader = ' + request.getHeader('Authorization'));
}

return response;
}


получаю соответственно:
endpoint = callout:JIRA
endpoint = callout:JIRA
authorizationHeader = null

хотя галочка Generate Authorization Header стоит, заголовок в реквест не записывается, да и ендпойнт тоже.

И второй вопрос: есть API где Named Credentials не подходит хочется записать токены в Custom Setting, но как их красиво пушить в прод?

Прикольно, не сталкивался с Named Credentials.

Обычно делаю это посредством Custom Settings. Если это пакет и custom settings являются Private, то сделаю специальную страницу Settings для доступа/редактирования Private Custom Settings. Да, еще требуется добавить Remote Site Settings, но это делается один раз и не доставляет проблем. Зато гибко.

На счет прода не вижу проблем. Наоборот - под каждый орг нужны свои креды для API, поэтому ручное сохранение кредов на каждом орге (в том числи и проде) позволяет добавить проверочный шаг в настройке орга.

Но с Named Credentials все равно еще предстоит мне разобраться. Может это что-то и лучше.

Выше я отписал что пока не видел проблем с вариантом Custom Settings.

Я вот так собираю реквест

PageReference reference = new PageReference('callout:MyRest' + relativePath);

if(params != null) {
reference.getParameters().putAll(params);
}
final HttpRequest request = new HttpRequest();
request.setEndpoint(reference.getUrl());
if(body != null) {
request.setBody(body);
}
request.setMethod(httpMethod);
request.setHeader('Content-Type', 'application/json');
request.setHeader('apiAccessKeyId', '{!$Credential.UserName}');
request.setHeader('apiSecretAccessKey', '{!$Credential.Password}');

Gres
request.setHeader('apiAccessKeyId', '{!$Credential.UserName}');
request.setHeader('apiSecretAccessKey', '{!$Credential.Password}');

Фигасе! Я чет по ходу пропустил? Это что за фича в Apex в стригу запихивать Visualforce expression?
И как это работает?

Попробовал PageReference reference = new PageReference('callout:MyRest');
но все равно 'callout:MyRest' воспринимает как строку.
Наверное придется делать через Custom Setting.

Магия с '{!$Credential.UserName}'); тоже ввела в ступор, а если в классе будет упоминание нескольких Named Credentials интересно какие он возьмет.

akr0bat
Магия с '{!$Credential.UserName}'); тоже ввела в ступор, а если в классе будет упоминание нескольких Named Credentials интересно какие он возьмет.

У них же уникальные имена, ты их сетапишь в СФ

Interesting information? Help us, post link to social media..