Регистрация  |  Вход

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 для Basic Auth
есть метод:
[code]
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;
	}
[/code]
получаю соответственно:
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. Если это пакет и custom settings являются Private, то сделаю специальную страницу Settings для доступа/редактирования Private Custom Settings. Да, еще требуется добавить Remote Site Settings, но это делается один раз и не доставляет проблем. Зато гибко.

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

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

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

Но с 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}');

Я вот так собираю реквест
[code]
        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}');
[/code]

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

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

[quote="Gres"]
request.setHeader('apiAccessKeyId', '{!$Credential.UserName}');
request.setHeader('apiSecretAccessKey', '{!$Credential.Password}');[/quote]
Фигасе! Я чет по ходу пропустил? Это что за фича в Apex в стригу запихивать Visualforce expression?
И как это работает?

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

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

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

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


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

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

[quote="akr0bat"]Магия с '{!$Credential.UserName}'); тоже ввела в ступор, а если в классе будет упоминание нескольких Named Credentials интересно какие он возьмет.[/quote]
У них же уникальные имена, ты их сетапишь в СФ