WebAPI: The Good Parts を読んだ

Web API: The Good Partsを読みました。

WebAPIを作るうえで、どんなことに気を付けるとよいのかというのがコンパクトにまとまっていてよかったです。

基本は、長いものに巻かれろ。多数は正義。みたいな感じでしょうか。

ほかのAPIをたくさんみて、どんな風に作っているのか、同じように作れば、ユーザは混乱しない、という事実。

また、HTTPの特性をきちんとつかって、無駄なmetadataを付与しないというのも重要なんだなぁと。

HTTP Status Code 200 で、responseが {"error": "500","message":"some error"} みたいなのはまぁありえないっしょという。

最近の話なので、セキュリティにも言及しています。

配列ではなくオブジェクトを返したほうが若干セキュアだよとか、ブラウザで直接アクセスすることを想定していないのであれば、そうでないことを示すヘッダを付けて、scriptタグで読み込めないようにしましょうとか。

そんな感じで、なんとなく、基本的なところを抑えておくには良い本だと思いました。

FirefoxとWebExtensionとExtensionIDと。

はじめに

FirefoxのWebExtensionとNativeMessagingHostで通信をしようとしていまいちうまくいかなくていろいろ触ってみました。

まずは結論

ExtensionIDの確認がしたければ、とりあえず

console.log(chrome.runtime.id)

で吐かせましょう。

どうやってExtensionIDは決まるのか。

 "applications": {
     "gecko": {
         "id": "/^([a-z0-9-._]*@[a-z0-9-._]+|\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]
 {12}-\})$/i"
     }
 }

f:id:paihu:20170906222440p:plain

  • 署名済みなら addons.firefox.com の署名ページ f:id:paihu:20170906224651p:plain

  • 未署名をabout:debugging 経由で読み込んだら

毎回変わる [a-f0-9]+@temporary-addon というもの
これは、 chrome.runtime.id を表示させないとわからない気がします。
内部UUIDとは関係なさそう。

開発中どうすれば

素直に manifest.jsonに書くのがよさそうな気がします。

でも、これ書くとクロスブラウザ的な開発したいとき、 chromeに読み込ませると警告が出るのがいやらしい。。

とはいえ、開発中くらいID固定しないととってもつらいです。

CentOS7にISC Kea インストールする

メモだけ

インストール

yum -y install epel-release
yum -y install gcc gcc-c++ boost-devel flex
yum -y install log4cplus-devel botan-devel
yum -y install mysql-devel postgresql-devel
curl -L http://ftp.isc.org/isc/kea/1.2.0/kea-1.2.0.tar.gz -o kea-1.2.0.tar.gz
tar axf kea-1.2.0.tar.gz
cd kea-1.2.0
./configure --with-dhcp-mysql --with-dhcp-pgsql --enable-shell --prefix=/opt/kea
make install
ldconfig

DB初期化(mariadb)

# yum -y install mariadb-server
# systemctl start mariadb
# mysqladmin -u root password 'root'
# mysql -u root -p
password: ****
mysql> create user 'kea'@'localhost' IDENTIFIED BY 'kea';
mysql> create database 'kea';
mysql> grant all on kea.* to 'kea';
mysql> exit;
# kea-admin  lease-init mysql -u kea -p kea -n kea

設定(databaseにMariadbを指定)

    "lease-database": {
        "type": "mysql",
        "name": "kea",
        "user": "kea",
        "password": "kea",
        "host": "localhost",
        "port": 3306
    },
     "hosts-database": {
         "type": "mysql",
         "name": "kea",
         "user": "kea",
         "password": "kea",
         "host": "localhost",
         "port": 3306
     },

データベースの内部については http://kea.isc.org/wiki/HostReservationsHowTo ここを。

IPV4なら hosts に いわゆる固定IPアドレス払い出し用情報、 lease4 に 払い出したIPv4 情報 が載ってます。

select (HEX(hwaddr)),(HEX(address)) from lease4;

とかでリースしているIPAddresとMacAddressの組み合わせが見られますね。