Redis の WebAPI を作成

Redis の WebAPI をさまざまな言語、フレームワークで作成します。
まずは、仕様です。

## サーバーで Redis が動いていること。

key に対して、JSON 文字列を保存するという運用をします。

```text
$ sudo systemctl status redis
● redis-server.service - Advanced key-value store
     Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; preset:>
     Active: active (running) since Mon 2023-05-29 10:45:21 JST; 6h ago
       Docs: http://redis.io/documentation,
             man:redis-server(1)
   Main PID: 1001 (redis-server)
     Status: "Ready to accept connections"
      Tasks: 5 (limit: 37674)
     Memory: 6.8M
        CPU: 20.807s
     CGroup: /system.slice/redis-server.service
             └─1001 "/usr/bin/redis-server 127.0.0.1:6379"
```

## 作成する API は次の３つです。method は POST です。

> key を与えて値の読み出し。
> key と value (JSON 文字列）を与えて書き込み。
> key の一覧

## テストスクリプト
サーバーサイドに次のプログラムがあるとします。

```text
http://localhost/test_dir/api/redis_read.py
http://localhost/test_dir/api/redis_insert.py
http://localhost/test_dir/api/redis_list.py
```

プログラムはこちら
[Redis の WebAPI (python CGI)](https://qiita.com/ekzemplaro/items/31218becf0ac0b6f99a5)

curl によるテストスクリプト

```bash:test_get.sh
#
URL="http://localhost/test_dir/api/redis_read.py"
#
curl -X POST -d key=t1855 $URL
#
```

```bash:test_insert.sh
#
URL="http://localhost/test_dir/api/redis_insert.py"
#
curl -X POST -d key=t1855 \
-d value='{"name": "宇都宮","population": 87516,"date_mod": "2001-3-16"}' $URL
#
```

```bash:test_list.sh
#
URL="http://localhost/test_dir/api/redis_list.py"
#
curl -X POST $URL
#
```

Httpie によるテストスクリプト

```bash:httpie_get.sh
URL="http://localhost/test_dir/api/redis_read.py"
#
http --form POST $URL key=t1856
```

```bash:httpie_insert.sh
URL="http://localhost/test_dir/api/redis_insert.py"
#
http --form POST $URL key=t1856 value='{"name": "小山","population": 73125,"date_mod": "2001-6-8"}'
```

```bash:httpie_list.sh
URL="http://localhost/test_dir/api/redis_list.py"
#
http POST $URL
```

python によるテストプログラム

```py:test_get.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
#
#	test_get.py
#
#					Jan/14/2020
#
# ------------------------------------------------------------------
import  sys
import  requests
# ------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
#
url="http://localhost/test_dir/api/redis_read.py"
args={}
args['key'] = 't1855'
#
rr=requests.post(url,args)
print(rr.text)
#
sys.stderr.write("*** 終了 ***\n")
# ------------------------------------------------------------------
```

```py:test_insert.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
#
#	test_insert.py
#
#					Jan/14/2020
#
# ------------------------------------------------------------------
import  sys
import  requests
# ------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
#
url="http://localhost/test_dir/api/redis_insert.py"
args={}
args['key'] = 't1855'
args['value'] = '{"name": "宇都宮","population": 84516,"date_mod": "2001-3-16"}'
#
rr=requests.post(url,args)
print(rr.text)
#
sys.stderr.write("*** 終了 ***\n")
# ------------------------------------------------------------------
```

```py:test_list.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
#
#	test_list.py
#
#					Jan/14/2020
#
# ------------------------------------------------------------------
import  sys
import  requests
# ------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
#
url="http://localhost/test_dir/api/redis_list.py"
args={}
#
rr=requests.post(url,args)
print(rr.text)
#
sys.stderr.write("*** 終了 ***\n")
# ------------------------------------------------------------------
```

## サーバーサイド
[Redis の WebAPI (python CGI)](https://qiita.com/ekzemplaro/items/31218becf0ac0b6f99a5)
[Redis の WebAPI (PHP CGI)](https://qiita.com/ekzemplaro/items/21c1502df395262ab7f1)
[Redis の WebAPI (Ruby CGI)](https://qiita.com/ekzemplaro/items/62fc9f456a811c871af3)
[Redis の WebAPI (Express)](https://qiita.com/ekzemplaro/items/34f267e21e8195a2ea63)
[Redis の WebAPI (oak)](https://qiita.com/ekzemplaro/items/7953226ac291d83a65bb)
[Redis の WebAPI (Nuxt.js)](https://qiita.com/ekzemplaro/items/d24499b577f5c9c8c754)
[Redis の WebAPI (Gin)](https://qiita.com/ekzemplaro/items/3acfee6aeb634f6abbd3)
[Redis の WebAPI (FastAPI)](https://qiita.com/ekzemplaro/items/b33c1e4a52c7e2b64b85)
[Redis の WebAPI (Genie)](https://qiita.com/ekzemplaro/items/8d7d231a9decbeb4383d)