功能说明

de-graphql插件通过将URIs映射到GraphQL查询,从而可以将GraphQL上游转换为传统服务进行访问

运行属性

插件执行阶段:认证阶段 插件执行优先级:430

参数配置

参数描述默认
gqlgraphql 查询不能为空
endpointgraphql 查询端点/graphql
timeout查询连接超时,单位毫秒5000
domain服务域名,当服务来源是dns配置

插件使用

https://github.com/alibaba/higress/issues/268

  • 测试配置
  1. apiVersion: networking.higress.io/v1
  2. kind: McpBridge
  3. metadata:
  4. name: default
  5. namespace: higress-system
  6. spec:
  7. registries:
  8. - domain: api.github.com
  9. name: github
  10. port: 443
  11. type: dns
  12. —-
  13. apiVersion: networking.k8s.io/v1
  14. kind: Ingress
  15. metadata:
  16. annotations:
  17. higress.io/destination: github.dns
  18. higress.io/upstream-vhost: api.github.com
  19. higress.io/backend-protocol: HTTPS
  20. name: github-api
  21. namespace: higress-system
  22. spec:
  23. ingressClassName: higress
  24. rules:
  25. - http:
  26. paths:
  27. - backend:
  28. resource:
  29. apiGroup: networking.higress.io
  30. kind: McpBridge
  31. name: default
  32. path: /api
  33. pathType: Prefix
  34. —-
  35. apiVersion: extensions.higress.io/v1alpha1
  36. kind: WasmPlugin
  37. metadata:
  38. name: de-graphql-github-api
  39. namespace: higress-system
  40. spec:
  41. matchRules:
  42. - ingress:
  43. - github-api
  44. config:
  45. timeout: 5000
  46. endpoint: /graphql
  47. domain: api.github.com
  48. gql: |
  49. query ($owner:String! $name:String!){
  50. repository(owner:$owner, name:$name) {
  51. name
  52. forkCount
  53. description
  54. }
  55. }
  56. url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/de-graphql:1.0.0
  • 测试结果
  1. curl http://localhost/api?owner=alibaba&name=higress“ -H “Authorization: Bearer some-token”
  2. {
  3. data”: {
  4. repository”: {
  5. description”: Next-generation Cloud Native Gateway”,
  6. forkCount”: 149,
  7. name”: higress
  8. }
  9. }
  10. }

GraphQL介绍

GraphQL 端点

REST API 有多个端点,GraphQL API 只有一个端点。

与 GraphQL 通信

由于 GraphQL 操作由多行 JSON 组成,可以使用 curl 或任何其他采用 HTTP 的库。

在 REST 中,HTTP 谓词确定执行的操作。 在 GraphQL 中,执行查询要提供 JSON 请求体,因此 HTTP 谓词为 POST。 唯一的例外是内省查询,它是一种简单的 GET 到终结点查询。

GraphQL POST 请求参数

标准的 GraphQL POST 请求情况如下:

  • 添加 HTTP 请求头: Content-Type: application/json
  • 使用 JSON 格式的请求体
  • JSON 请求体包含三个字段
    • query:查询文档,必填
    • variables:变量,选填
    • operationName:操作名称,选填,查询文档有多个操作时必填
  1. {
  2. query”: “{viewer{name}}”,
  3. operationName”: “”,
  4. variables”: {
  5. name”: value
  6. }
  7. }

GraphQL 基本参数类型

  • 基本参数类型包含: String, Int, Float, Boolean
  • [类型]代表数组,例如:[Int]代表整型数组
  • GraphQL 基本参数传递
    • 小括号内定义形参,注意:参数需要定义类型
    • !(叹号)代表参数不能为空
  1. query ($owner : String!, $name : String!) {
  2. repository(owner: $owner, name: $name) {
  3. name
  4. forkCount
  5. description
  6. }
  7. }

GitHub GraphQL 测试

使用 curl 命令查询 GraphQL, 用有效 JSON 请求体发出 POST 请求。 有效请求体必须包含一个名为 query 的字符串。

  1. -H Authorization: bearer <PAT>” \
  2. -d “{\”query\”: \”query { viewer { login }}\”}”
  3. {
  4. data”: {
  5. viewer”: {
  6. login”: 2456868764
  7. }
  8. }
  9. }
  1. curl https://api.github.com/graphql‘ -X POST \
  2. -H Authorization: bearer <PAT>’ \
  3. -d ‘{“query”:”query ($owner: String!, $name: String!) {\n repository(owner: $owner, name: $name) {\n name\n forkCount\n description\n }\n}\n”,”variables”:{“owner”:”2456868764”,”name”:”higress”}}’
  4. {
  5. data”: {
  6. repository”: {
  7. name”: higress”,
  8. forkCount”: 149,
  9. description”: Next-generation Cloud Native Gateway | 下一代云原生网关”
  10. }
  11. }
  12. }

参考文档