فراخوانی GraphQL API در یک کلاینت ASP.NET Core
نویسنده: ابوالفضل روشن ضمیر
تاریخ: ۱۳۹۸/۰۴/۲۲ ۲۳:۲۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
dotnet new api -n DotNetGraphQLClient
https://localhost:5003;http://localhost:5004
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"GraphQLURI": "https://localhost:5001/graphql",
"AllowedHosts": "*"
} dotnet add package GraphQL.Client
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped(x => new GraphQL.Client.GraphQLClient(Configuration["GraphQLURI"]));
...
} public class OwnerConsumer
{
private readonly GraphQL.Client.GraphQLClient _client;
public OwnerConsumer(GraphQL.Client.GraphQLClient client)
{
_client = client;
}
} public void ConfigureServices(IServiceCollection services)
{
services.AddScoped(x => new GraphQL.Client.GraphQLClient(Configuration["GraphQLURI"]));
services.AddScoped<OwnerConsumer>();
...
} public enum TypeOfAccount
{
Cash,
Savings,
Expense,
Income
} public class Account
{
public Guid Id { get; set; }
public TypeOfAccount Type { get; set; }
public string Description { get; set; }
} public class Owner
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public ICollection<Account> Accounts { get; set; }
} public class OwnerInput
{
public string Name { get; set; }
public string Address { get; set; }
} public async Task<List<Owner>> GetAllOwners()
{
var query = new GraphQLRequest
{
Query = @"
query ownersQuery{
owners {
id
name
address
accounts {
id
type
description
}
}
}"
};
var response = await _client.PostAsync(query);
return response.GetDataFieldAs<List<Owner>>("owners");
}
[Route("api/owners")]
public class OwnerController: Controller
{
private readonly OwnerConsumer _consumer;
public OwnerController(OwnerConsumer consumer)
{
_consumer = consumer;
}
[HttpGet]
public async Task<IActionResult> Get()
{
var owners = await _consumer.GetAllOwners();
return Ok(owners);
}
}
public async Task<Owner> CreateOwner(OwnerInput ownerToCreate)
{
var query = new GraphQLRequest
{
Query = @"
mutation($owner: ownerInput!){
createOwner(owner: $owner){
id,
name,
address
}
}",
Variables = new { owner = ownerToCreate }
};
var response = await _client.PostAsync(query);
return response.GetDataFieldAs<Owner>("createOwner");
} [HttpPost]
public async Task<IActionResult> PostItem([FromBody]OwnerInput model)
{
var result = await _consumer.CreateOwner(model);
return Json(result);
}