使用带有graphql的web api的最佳实践

时间:2017-01-15 12:28:31

标签: c# asp.net-web-api graphql

有点天真的问题但是现在我想创建一个更灵活的web api我刚刚阅读了gqphql,接受查询字符串并返回包含结果的字符串是一个很好的做法

任何使用web api和graphql的例子,我知道我可以使用像jws这样的东西来保证查询但是我正在谈论这个想法和最佳实践

5 个答案:

答案 0 :(得分:2)

我自己没有尝试过,但从我读过的内容中,很多用户都使用过graphql-dotnet。它还有一个很好的入门指南。

http://graphql-dotnet.github.io/graphql-dotnet/getting-started

https://github.com/graphql-dotnet/graphql-dotnet

它基于Facebooks graphql

https://github.com/facebook/graphql

要了解有关graphql及其内容的更多信息:

http://graphql.org/learn/

答案 1 :(得分:2)

我是Hot Chocolate的贡献者。

为了使GraphQL与Web API并行运行,只需将以下软件包添加到您的项目中:

HotChocolate.AspNetCore

然后在启动的ConfigureService方法中添加以下内容:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGraphQL(Schema.Create(c =>
    {
        c.RegisterQueryType<Query>();
    }));
}

在配置部分,只需添加UseGraphQL

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseGraphQL();
}

GraphQL只是与Web api中间件并排的另一个中间件。

如果您使用的是.Net Framework而不是.Net Core,则必须使用

HotChocolate.AspNetClassic

我们在这里有一个适用于.Net Core和.Net Framework的StarWars示例: https://github.com/ChilliCream/hotchocolate/tree/master/examples

您可以在这里找到文档: https://hotchocolate.io

希望有帮助。

答案 2 :(得分:0)

我可以像Ogglas之前所说的那样突出显示https://github.com/graphql-dotnet/graphql-dotnet。 顺便说一句,许多贡献者正在努力开发lib,而我本人在最近发布的实际项目中亲自使用了它。性能或记忆库没有问题,因此,绝对值得推荐。

此外,刚刚完成的基于GraphQL.Net库的组件。它允许配置GraphQL模式,而无需开发代码(您可以在json文件中定义它),也可以从包装盒中非常简单快速地进行数据库适配器(可以连接到任何流行的数据库,例如-MSSQL,MySQL,PostgreSQL甚至是ElasticSearch)。

答案 3 :(得分:0)

我希望这会有所帮助: 看一下我使用graphql-dotnet Nuget包的.Net Core 2.1 GraphQL Web API的小样本。 那只是一个小例子,但它使用EF Core和一个节点Parent-Child关系来完成查询和变异。

看一下: SampleGraphQLWebApi

谢谢

答案 4 :(得分:-1)

我认为最好的解决方案是热巧克力, 要创建功能样本,请使用以下命令:

  • dotnet新-i HotChocolate.Templates.StarWars
  • mkdir星际大战
  • cd星际大战
  • dotnet新星际大战
  • dotnet运行--project StarWars / StarWars.csproj -c版本

使用此地址:http://127.0.0.1:5000/playground

尝试如下查询以开始使用

{ human(id:1000) { name, appearsIn, friends { name, appearsIn } } }