From architecture-dotnet
Gera integrações com APIs de terceiros usando padrão Adapter/Gateway. Use quando o usuário mencionar "integração com API", "API externa", "chamar API", "consumir API", "serviço externo", "third-party", "webhook", "REST client", "HTTP client", "adapter", "gateway", "integração com", "conectar com API", "cliente HTTP". Também dispara quando pedir para criar integrações com serviços como pagamento, envio de email, SMS, notificações push, CEP, ou qualquer serviço externo. NÃO use para APIs internas do próprio sistema (use dotnet-endpoint-generator).
How this skill is triggered — by the user, by Claude, or both
Slash command
/architecture-dotnet:architecture-external-serviceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Gera integrações com APIs externas usando padrão Adapter/Gateway, HttpClientBase com Polly (resiliência) e logging estruturado.
Gera integrações com APIs externas usando padrão Adapter/Gateway, HttpClientBase com Polly (resiliência) e logging estruturado.
references/http-client-base.md para a classe base HTTPreferences/adapter-gateway.md para padrão Adapter/Gatewayreferences/resilience.md para configuração de Pollyreferences/authentication.md para OAuth2/Bearer TokenPergunte ao usuário:
Para cada endpoint, definir:
Infrastructure/
└── ExternalServices/
├── Common/
│ ├── HttpClientBase.cs
│ ├── ExternalServiceException.cs
│ └── ExternalServiceResponse.cs
├── {Provider}/
│ ├── I{Provider}Gateway.cs # Interface
│ ├── {Provider}Adapter.cs # Implementação
│ ├── {Provider}Settings.cs # Configurações
│ ├── Models/
│ │ ├── Requests/
│ │ │ └── {Action}Request.cs
│ │ └── Responses/
│ │ └── {Action}Response.cs
│ └── Mappers/
│ └── {Provider}Mapper.cs # Conversão Domain <-> API
└── DependencyInjection.cs
HttpClientBaseI{Provider}Gateway definida{Provider}Settings com URL base e credenciaisResult<T> em todos os métodosAddHttpClient<T>()appsettings.json// ✅ CORRETO
public class StripeAdapter : HttpClientBase, IStripeGateway
{
public StripeAdapter(
HttpClient httpClient,
IOptions<StripeSettings> settings,
ILogger<StripeAdapter> logger)
: base(httpClient, logger)
{
}
}
// ❌ INCORRETO - Não injetar HttpClient diretamente
public class StripeAdapter : IStripeGateway
{
private readonly HttpClient _httpClient; // NÃO FAZER
}
// ✅ CORRETO
public async Task<Result<PaymentResponse>> CreatePaymentAsync(
CreatePaymentRequest request,
CancellationToken ct)
{
var response = await PostAsync<PaymentApiResponse>("/payments", request, ct);
if (!response.IsSuccess)
return Result.Error(response.ErrorMessage);
return Result.Success(_mapper.ToPaymentResponse(response.Data!));
}
| Artefato | Padrão | Exemplo |
|---|---|---|
| Gateway Interface | I{Provider}Gateway | IStripeGateway |
| Adapter | {Provider}Adapter | StripeAdapter |
| Settings | {Provider}Settings | StripeSettings |
| API Request | {Action}ApiRequest | CreatePaymentApiRequest |
| API Response | {Action}ApiResponse | CreatePaymentApiResponse |
Application Layer Infrastructure Layer External API
│ │ │
│ IStripeGateway │ │
├──────────────────────────►│ │
│ │ StripeAdapter │
│ │ (herda HttpClientBase) │
│ │ │ │
│ │ │ POST /payments │
│ │ ├────────────────────►│
│ │ │ │
│ │ │◄────────────────────┤
│ │ │ JSON Response │
│ │◄────────┤ │
│ Result<PaymentResponse> │ Map to Domain │
│◄──────────────────────────┤ │
Causa: Não registrado com AddHttpClient<T>()
Solução: Usar services.AddHttpClient<IStripeGateway, StripeAdapter>()
Causa: Timeout muito baixo ou API lenta
Solução: Ajustar TimeoutSeconds nas settings
Causa: Taxa de falha muito alta Solução: Verificar conectividade, credenciais, ou ajustar thresholds
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub brunocesharp/claude --plugin architecture-dotnet