使用lua graphql 模組讓openresty 支援graphql api
graphql 是一個很不錯的api 查詢標準語言,已經有一個lua 的版本支援graphql
專案使用docker&&docker-compose 執行
環境準備
- 模組安裝
luarocks install graphql
- docker映象準備
模組使用luarocks 安裝,預設alpine 映象是沒有安裝這個包,我們使用alpine-fat的
FROM openresty/openresty:alpine-fat RUN /usr/local/openresty/luajit/bin/luarocks install graphql
專案程式碼
- 專案結構
├── Dockerfile
├── README.md
├── app
├── docker-compose.yaml
└── nginx.conf
- nginx.conf
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; lua_code_cache off; gzip on; real_ip_header X-Forwarded-For; real_ip_recursive on; lua_package_path '/opt/app/?.lua;;'; server { listen 80; server_name localhost; charset utf-8; root html; default_type text/html; location / { content_by_lua_block { require("html/app")() } } # graphql 支援 location /g { more_set_headers 'Content-Type application/json'; content_by_lua_block { require("g/init")() } } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
- graphql 程式碼
app/g/init.lua local parse = require 'graphql.parse' local schema = require 'graphql.schema' local types = require 'graphql.types' local validate = require 'graphql.validate' local execute = require 'graphql.execute' local json = require "cjson" -- Parse a query local ast = parse [[ query getUser($id: ID) { person(id: $id) { firstName lastName } } ]] -- Create a type local Person = types.object { name = 'Person', fields = { id = types.id.nonNull, firstName = types.string.nonNull, middleName = types.string, lastName = types.string.nonNull, age = types.int.nonNull } } -- Create a schema local schema = schema.create { query = types.object { name = 'Query', fields = { person = { kind = Person, arguments = { id = types.id }, resolve = function(rootValue, arguments) if arguments.id ~= 1 then return nil end return { id = 1, firstName = 'Bob', lastName = 'Ross', age = 52 } end } } } } -- Validate a parsed query against a schema validate(schema, ast) -- Execution local rootValue = {} local variables = { id = 1 } local operationName = 'getUser' local function g() local result=execute(schema, ast, rootValue, variables, operationName) ngx.say(json.encode(result)) end return g
執行
- build 映象
docker-compose build
- 執行
docker-compose up -d
- 效果
參考資料
相關推薦
使用lua graphql 模組讓openresty 支援graphql api
graphql 是一個很不錯的api 查詢標準語言,已經有一個lua 的版本支援graphql 專案使用docker&&docker-compose 執行 環境準備 模組安裝 luarocks install graphql docker映象準備
使用ASP.NET Core支援GraphQL -- 較為原始的方法
GraphQL簡介 下面是GraphQL的定義: GraphQL 既是一種用於 API 的查詢語言也是一個滿足你資料查詢的執行時。 GraphQL 對你的 API 中的資料提供了一套易於理解的完整描述,使得客戶端能夠準確地獲得它需要的資料,而且沒有任何冗餘,也讓 API 更容易地隨著時間推移而演進,還能用於
使用 Apollo Client 快速構建一個支援 GraphQL 的 React App
這篇文章主要介紹 GraphQL 在 Client 的使用,為了方便,本文會直接使用 React 建立一個 Web demo 去介紹 Apollo 在 React 中的使用方法,當然在 ReactNative 中用法幾乎一模一樣。Apollo Client 是一個 GraphQL C
Lua:模組、使用位操作BitOp、C API(Lua與C互相呼叫)
一、模組 1.1 概述 建立一個模組最簡單的方法是: 1. 建立一個table; 2. 並將所有需要匯出的函式放入其中; 3. 最後返回這個table。 1.2 程式碼 檔案:test.lua complex = {} f
通過擴充套件讓ASP.NET Web API支援JSONP
同源策略(Same Origin Policy)的存在導致了“源”自A的指令碼只能操作“同源”頁面的DOM,“跨源”操作來源於B的頁面將會被拒絕。同源策略以及跨域資源共享在大部分情況下針對的是Ajax請求。同源策略主要限制了通過XMLHttpRequest實現的Ajax請求
通過擴展讓ASP.NET Web API支持JSONP
web api enc pan star close web應用 lba dia 不存在 同源策略(Same Origin Policy)的存在導致了“源”自A的腳本只能操作“同源”頁面的DOM,“跨源”操作來源於B的頁面將會被拒絕。同源策略以及跨域資源共享在大部分情況下針
https-讓網站支援https協議2
上篇寫到怎麼搭建https://mp.csdn.net/postedit/79349084 顯示 域名剩餘天數: ./certbot-auto certificates 手工更新: ./certbot-auto certonly --w
Django 實現HTML轉PDF 用通用檢視編寫PDF 並且讓PDF支援中文
Django 實現HTML轉PDF 用通用檢視編寫PDF 並且讓PDF支援中文 如何使用django-easy-pdf django-easy-pdf的依賴 安裝django-easy-pdf 使用過程中遇到的問題總結
讓MySQL支援Emoji表情 mysql 5.6
讓MySQL支援Emoji表情,涉及無線相關的 MySQL 資料庫建議都提前採用 utf8mb4 字符集。 mysql 版本 5.6 1 解決方案:將Mysql的編碼從utf8轉換成utf8mb4。 需要 >=
linux之讓終端支援C++11/14編譯cpp檔案
1 問題 我們的專案很多智慧指標,但是我linux的終端肯定不支援C++11/14, 我們平時都是用的下面的命令編譯c++檔案 g++ -g file.cpp -o file r 如果是用c++11編譯需要改成如下 g++ -g -Wall -std=c+
Koa2學習系列08-解析JSON——讓 Koa2 支援響應 JSON 資料
JSON 資料 我顛倒了整個世界,只為擺正你的倒影。 前面的文章中,我們已經完成了專案中常見的問題,比如 路由請求、結構分層、檢視渲染、靜態資源等。 那麼,JSON 呢?JSON 格式資料的傳輸,已經深入到了我們的碼裡行間,脫離了
Linux系統裡讓vim支援markdown格式的語法高亮
Markdown是深受程式設計師喜愛的一個檔案格式。 然而Linux裡預設的vim設定,並不支援markdown格式的語法高亮顯示。 下面就來介紹如何設定使得markdown格式的檔案在vim裡也能享有語法高亮的待遇。 首先安裝一個vim的外掛管理工具: vim-pathogen 它的原始碼地址:
Fedora CentOS Red Hat中讓vim支援語法高亮設定
Fedora / CentOS / Red Hat這三個系統裡預設的vi是沒有語法高亮顯示的,白色的字型看起來很不舒服。 首先用命令列cat /etc/os-release檢視當前linux系統的型別,發現為Red Hat: 使用命令列yum install vim-enhanced下載vi的增強
讓postgresql支援儲存過程(函式)的除錯
原帖地址:http://blog.chinaunix.net/uid-280772-id-2135418.html 用PG做了些專案,積累了些經驗,其中之一就是在PG下除錯function。 可以設定break point,單步除錯,就象在eclipse
ASP.NET Core中使用GraphQL - 第八章 在GraphQL中處理一對多關係
ASP.NET Core中使用GraphQL - 目錄 ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中介軟體 ASP.NET Core中使用GraphQL - 第三章 依賴注入 ASP.NE
ASP.NET Core中使用GraphQL - 第八章 在GraphQL中處理一對多關系
得到 sta inventory 關系 object https col dot asf ASP.NET Core中使用GraphQL - 目錄 ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQ
ASP.NET Core中使用GraphQL - 第九章 在GraphQL中處理多對多關係
ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中介軟體 ASP.NET Core中使用GraphQL - 第三章 依賴注入 ASP.NET Cor
如何讓div支援focus事件
一般情況下,onblur事件只在input等元素中才有,而div卻沒有,因為div沒有tabindex屬性,所以要給div加上此屬性。 如: 1 <div tabindex="0" hidefocus="true" onfocus='a
linux讓Apache支援.htaccess偽靜態檔案時遇到的坑
相信很多人都在windows環境開發好專案後再佈置到linux上,但這個時候或許你發現你的偽靜態不起作用了,很無奈,或許你還沒進行相關配置。 這個時候你就得做一下幾步操作了。。。。。 第一、編輯httpd.conf檔案 ----------------- 1、 - 在etc/httpd/
讓uboot 支援 ubi
轉載地址:http://blog.chinaunix.net/uid-15706699-id-2670964.html uboot已經支援ubi,只要在.h檔案中開啟巨集定義就可以了,修改如下: //新增加對ubifs的支援 #define CONFI