GraphQL API如何对多ID重复查询,无需重复编写片段
GraphQL多ID同结构查询优化方案
有两种常用的实现方案,不需要手动重复编写course查询片段:
方案1:动态生成查询别名(无后端依赖)
你可以在代码中批量生成查询的别名部分,无需手动逐个编写course节点:
# 定义需要查询的课程ID列表 course_ids = [12, 13, 15, 17, 20] # 动态生成查询字段部分 query_fields = "\n".join([f' course_{cid}: course(id: {cid}) {{ ...CourseFragment }}' for cid in course_ids]) # 拼接完整查询语句 q = f'''{{ {query_fields} }} fragment CourseFragment on Course {{ CourseID: _id CourseUUID: id CourseName: name }} ''' # 按标准格式发送请求 data = requests.post('url', json={"query": q}, headers=headers)
返回结果中会以course_12、course_13等为key对应各个课程的数据。如果你的课程ID是字符串类型,拼接时要给ID值加上引号避免语法错误。
方案2:使用后端批量查询接口(优先推荐)
如果后端GraphQL服务提供了支持批量ID查询的字段(通常为courses(ids: [ID!]!)格式),可以直接用查询变量实现,无需拼接查询字符串,性能和可维护性更好:
# 定义带变量的查询语句,全程无需修改 q = ''' query getCourses($courseIds: [Int!]!) { courses(ids: $courseIds) { ...CourseFragment } } fragment CourseFragment on Course { CourseID: _id CourseUUID: id CourseName: name } ''' # 传递查询变量 variables = {"courseIds": [12, 13, 15, 17, 20]} # 按GraphQL标准格式发请求 data = requests.post('url', json={"query": q, "variables": variables}, headers=headers)
返回结果中courses字段就是所有ID对应课程的列表,顺序和你传入的ID列表顺序一致。
内容的提问来源于stack exchange,提问作者mounica
相关产品推荐
相关产品推荐

