使用 GraphQL 机制,但返回 CSV

2024-03-04

普通的 REST API 可能会让您以不同的格式请求相同的数据,并使用不同的Accept标头,例如application/json, or text/html, or a text/csv格式化的响应。

但是,如果您使用 GraphQL,则 JSON 似乎是唯一可接受的返回内容类型。但是,我需要我的 API 能够返回 CSV 数据,以供无法理解 JSON 的不太复杂的客户端使用。

如果给定一个 GraphQL 端点返回 CSV 数据是否有意义Accept: text/csv标头?如果没有,是否有更好的练习方法来做到这一点?

这更多的是一个概念性问题,但我专门使用Graphene https://graphene-python.org/来实现我的 API。它是否提供任何处理自定义内容类型的机制?


是的,你可以,但它不是内置的,你必须覆盖一些东西。这更像是一种解决方法。

执行以下步骤,您将获得 csv 输出:

  1. Add csv = graphene.String()根据您的疑问并将其解决为您想要的任何内容。

  2. 创建一个新类继承GraphQLView

  3. 覆盖dispatch函数看起来像这样:

    def dispatch(self, request, *args, **kwargs):
        response = super(CustomGraphqlView, self).dispatch(request, *args, **kwargs)
        try:
            data = json.loads(response.content.decode('utf-8'))
            if 'csv' in data['data']:
                data['data'].pop('csv')
                if len(list(data['data'].keys())) == 1:
                    model = list(data['data'].keys())[0]
                else:
                    raise GraphQLError("can not export to csv")
                data = pd.json_normalize(data['data'][model])
                response = HttpResponse(content_type='text/csv')
                response['Content-Disposition'] = 'attachment; filename="output.csv"'
    
                writer = csv.writer(response)
                writer.writerow(data.columns)
                for value in data.values:
                    writer.writerow(value)
        except GraphQLError as e:
            raise e
        except Exception:
            pass
        return response
    
  4. 导入所有必要的模块

  5. 替换默认值GraphQLView在你的urls.py文件与您的新视图类。

现在,如果您在 GraphQL 查询中包含“csv”,它将返回原始 csv 数据,然后您可以将数据保存到前端的 csv 文件中。示例查询如下:

query{
  items{
    id
    name
    price
    category{
        name
    }
  }
  csv
}

请记住,这是一种获取 csv 格式的原始数据的方法,您必须保存它。您可以使用以下代码在 JavaScript 中执行此操作:

req.then(data => {
    let element = document.createElement('a');
    element.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(data.data));
    element.setAttribute('download', 'output.csv');

    element.style.display = 'none';
    document.body.appendChild(element);

    element.click();

    document.body.removeChild(element);
})

此方法会展平 JSON 数据,因此不会丢失任何数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GraphQL 机制,但返回 CSV 的相关文章

  • 将 word2vec 模型查询的结果保存在 csv 文件中?

    我正在语料库上训练 word2vec 模型 然后查询该模型 这工作正常 但我正在运行一个实验 需要针对不同的条件调用模型 保存每个条件的模型 查询每个条件的模型 然后将查询的输出保存到 csv 文件中 例如进一步分析所有条件 我研究了 ge
  • 调用 DynamoDB 中的用户数据时渲染得太晚

    所以我试图从dynamoDB 我正在使用一个GraphQL API访问我的数据库 在提供的代码的注释部分中 我提到我已经尝试过users 1 friends map 它确实返回正确的朋友列表数组 但用户似乎直到朋友列表渲染后才被设置 我应该
  • 导入 csv 文件数据以填充 Prolog 知识库

    我有一个 csv 文件example csv其中包含两列 标题为 var1 和 var2 我想填充一个最初为空的 Prolog 知识库文件import pl具有重复的事实 而每一行example csv处理方式相同 fact A1 A2 f
  • graphql 中的 Console.log 解析器数据

    我正在尝试在 graphql 应用程序中 console log 解析器 graphiql 部分可以工作 我可以启动服务器并查看 graphql 仪表板 然后使用根查询在浏览器窗格中检索结果 但我无法在浏览器控制台中 console log
  • 从 csv 中读取 pandas 数据帧,以非固定标头开始

    我有许多数据文件是由我的实验室中使用的一些相当黑客的脚本生成的 该脚本非常有趣 因为它在标头之前附加的行数因文件而异 尽管它们具有相同的格式并具有相同的标头 我正在编写一个批处理来将所有这些文件处理为数据帧 如果我不知道位置 如何让 pan
  • python csv按列转换为字典

    是否可以将 csv 文件中的数据读取到字典中 使得列的第一行是键 同一列的其余行构成列表的值 例如 我有一个 csv 文件 strings numbers colors string1 1 blue string2 2 red string
  • 在另一列中查找重复值时,如何将列数据存储为逗号分隔值? [复制]

    这个问题在这里已经有答案了 如果任何公司的产品都相同 我必须组合或内爆子数组值 预期输出应该类似于 0 gt array company gt 1 6 product gt 5 我的数组是 array 0 gt array company
  • 如何使用 Nuxt ServerMiddleware 和 Apollo GraphQL 处理 301 重定向

    我目前正在构建一个 Vue Nuxt 应用程序 并结合修改后的 Saleor 安装来在线销售产品 当我们从现有系统迁移时 我们需要能够处理从旧网站 URL 到新网站 URL 的 301 重定向 我修改了 API 以响应以下 GraphQL
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • CSV、Python:正确使用 DictWriter(ValueError:dict 包含不在字段名中的字段)

    我在掌握 csv 模块 Python 2 7 中的 DictWriter 时遇到困难 我有这个 哦 我正在使用 unicodecsv 库 因为我读到存在问题 f object instance return a dictionary key
  • Excel VBA - 如何逐行读取csv文件而不是整个文件

    这是我需要读取的 csv 文件内容 header header header header header header value value value value value value value value value 我在网上找到
  • 在powershell的列中处理带有换行符的CSV

    目前 我有一个系统 它创建一个像下面这样的分隔文件 在其中我模拟了偶尔出现在列中的额外换行符 列 1 列 2 列 3 列 4 文本1 文本2 LF 文本3 LF 文本4 CR LF 文本1 文本2 LF LF 文本3 文本4 CR LF 文
  • 您可以用 Google 的 Protocol Buffer 格式表示 CSV 数据吗?

    我最近发现了协议缓冲区 想知道它们是否可以应用于我的特定问题 基本上 我有一些 CSV 数据 需要将其转换为更紧凑的格式以进行存储 因为其中一些文件有几GB CSV中的每个字段都有一个标题 并且只有两种类型 字符串和小数 因为有时有很多有效
  • type-graphql:如何知道Resolver返回了哪些字段

    我正在编写一个使用 type graphql 的后端应用程序 GraphQL 架构包括Folder键入如下所示 type Folder id ID name String rules Rule parent Group Rule and G
  • 如何在 scikit 中加载 CSV 数据并将其用于朴素贝叶斯分类

    尝试加载自定义数据以在 Scikit 中执行 NB 分类 需要帮助将示例数据加载到 Scikit 中 然后执行 NB 如何加载目标的分类值 使用相同的数据进行训练和测试 或使用完整的数据集进行测试 Sl No Member ID Membe
  • css mime 类型返回为 text/plain 而不是 text/css

    我正在使用此代码从给定文件中获取 mime 类型 finfo new finfo FILEINFO MIME TYPE mime finfo gt buffer file get contents file 如果我给它提供一个 PHP 文件
  • 在 PHP 中将 CSV 写入不带括号的文件

    是否有本机函数或实体类 库用于将数组写入 CSV 文件中的一行而无需封装 fputcsv将默认为 如果没有为封装参数传入任何内容 谷歌让我失望了 返回一大堆有关的页面的结果 fputcsv PEAR 的库做的事情或多或少与fputcsv 工
  • 仅将 pandas df 的前 N ​​行写入 csv

    如何仅将前 N 行或从 P 到 Q 行从 pandas 数据帧写入 csv 而不首先对 df 进行子集化 由于内存问题 我无法对要导出的数据进行子集化 我正在考虑一个逐行写入 csv 的函数 谢谢 Use head https pandas
  • Hive:如何分解嵌入 CSV 文件中的 JSON 列?

    从 CSV 文件 带有标题和管道分隔符 中 我得到了以下两个内容 其中包含一个 JSON 列 内部有一个集合 如下所示 第一种情况 使用没有名称的 JSON 集合 ProductId IngestTime ProductOrders 918
  • 使用Python批量编辑csv文件

    我需要编辑几个 csv 文件 实际上 大多数文件都很好 只是最后 第 41 列需要更改 对于该列中特定字符串的每次出现 我需要将其替换为不同的字符串 具体来说 每次出现的 S D 都需要替换为 S 我尝试使用 Python 来完成此操作 但

随机推荐

  • 更改 RStudio 编辑器主题

    我正在尝试更改 RStudio 编辑器主题 以便我可以设置自己的颜色 我在 Windows 10 上使用 RStudio 版本 0 99 473 我已经评论过有什么方法可以将 Rstudio 中的颜色更改为默认选项以外的颜色吗 https
  • 在 MVC 3 Razor 中获取活动页面链接的更好方法

    当我希望特定的菜单链接在给定页面上处于活动状态时 我在 Razor 中使用此方法 在主布局上我有这些检查 var active ViewBag Active const string ACTIVE CLASS current if acti
  • 为什么安装 Xcode 命令行工具会改变“gcc --version”报告的内容

    最近我通过AppStore将OS 10 9上的Xcode更新到版本5 0 1 在我看来 此更新还更新了命令行工具 例如运行gcc version产生的 Configured with prefix Applications Xcode ap
  • 如何在html中设置自定义光标?

    我想为我的网站使用自定义光标图标 永久 我该怎么做 光标被下载为一个简单的 ico文件 我尝试过自定义光标命令 但它似乎不起作用 html body cursor url cursor ico default just change the
  • 是否可以将外部 bean 配置 xml 文件导入 resources.groovy 中?

    在我当前的 grails 应用程序中 我在 resources groovy 中定义了 spring beans 现在我还有一个 xml 文件 其中已经定义了一堆 bean 我想按原样使用它们 而不是在 bean dsl 中重新创建每个 b
  • 使用 Jenkins 共享库作为类

    我有一个 Jenkins 文件 我正在尝试从我的共享库实例化一个常规类 我得到 无法解决类测试 我在共享库中有一个 src com org foo groovy 文件 package com org class Test implement
  • Cesium地图可以在Apache HTTP服务器而不是node.js环境上运行吗?

    我有一个 Apache HTTP 服务器 可以处理我对 Ruby on Rails 项目的所有请求 我们正在考虑添加 Cesium 地图组件 我想知道是否可以在 Apache HTTP 服务器上运行 Cesium 而不是设置 node js
  • 在 Android 1.5 上运行应用程序时出现 NotFoundException 和 FileNotFoundException

    我正在尝试将 android 1 6 应用程序向后移植到 android 1 5 遵循此处的建议 http comments gmane org gmane comp handhelds android devel 97051 http c
  • Python Matlab 引擎安装

    我一直在尝试为 python 安装 matlab 引擎 这样我就可以从 python 脚本中调用 matlab 函数 我使用的指南是这个 http uk mathworks com help matlab matlab external i
  • 如何以编程方式删除 UINavigationbar 提示?

    我有一个视图控制器 我在IB中设置了带提示的导航栏 但有时我想删除提示并将栏设为 1 行 我怎样才能在代码中做到这一点 self navigationItem setPrompt nil 这会以动画方式删除提示
  • Webpack 动态 require 和 require 语句中的加载器

    是否可以使用动态require and require context在 require 语句中使用显式加载器 我希望能够做这样的事情 但这对我不起作用 var req require context somedir false js va
  • 如何在 linq 中使用 groupby 时进行多重连接

    我的数据库中有一个图片评级表 对于每个新的评级 都会创建一个新的图片评级表行 我将按上周和图片 ID 对这些评分进行分组 这意味着上周一张图片的所有评分将被累积并成为一个评分 然后我将能够按其计数对它们进行排序 这是我的图片评级表 publ
  • 如何在 celery 内为每个用户生成队列?

    因此 我尝试将 Web 请求中的阻塞内容移至后台任务并利用队列 我对消息传递和发布 订阅也很陌生 用户将数据推送到那里并进行处理 稍后用户会收到相关通知 我为此做了一个 celery 设置 发现它不能满足我为每个用户分配自己的任务的专用队列
  • Android 和设置(图像)视图 alpha 的 alpha

    真的没有对应的 XML 属性吗 setAlpha int 如果没有 还有哪些替代方案 它比其他响应更容易 有一个xml值alpha需要双值 android alpha 0 0 那是看不见的 android alpha 0 5 透视 andr
  • Rails 5.2 中单独的secret_key_base?

    我刚刚从 5 1 升级到 5 2 我对这种 更好 的存储秘密的方法感到很困惑 也许我不明白 但现在开发和生产似乎已经 合并 成一个单一的SECRET KEY BASE也master key 它是否正确 如果没有 我如何使用单独的主密钥和SE
  • 使用 Firebase-PHP 验证 Firebase ID 令牌

    我正在使用 Firebase Auth 在以 PHP 编码的网络应用程序上授权用户 授权本身是用 Javascript 进行的 它在 Ajax 请求上执行以验证用户是否已登录 要在我已经实现的服务器上使用 Firebase AdminFir
  • 当我单击屏幕上的其他位置时,按钮的底部边框消失

    fiddle https jsfiddle net bbvxnsyo 这是我的 HTML 代码
  • 基于偏好的分组算法

    我正在寻找一种方法来根据偏好将人们分类 例如 假设有 100 名学生 每人将被分配到以下五个班级之一 科学 40 个座位 数学 15 个席位 历史 15 个席位 电脑 20 个座位 写作 10 个座位 每个学生都有三个按偏好排序的首选课程
  • 为 std::shared_ptr 分配内存的正确方法

    我已经实现了一个功能 其中身份被赋予给我并且不受我的控制 它返回std shared ptr
  • 使用 GraphQL 机制,但返回 CSV

    普通的 REST API 可能会让您以不同的格式请求相同的数据 并使用不同的Accept标头 例如application json or text html or a text csv格式化的响应 但是 如果您使用 GraphQL 则 JS