公開しました!
なにそれ
e-Gov という総務省の運営する電子申請の窓口がある。
社会保険や労働保険関連の手続きを Web 上から簡単に行うための窓口だ。
これまでは役所に行って、用紙を貰って、書いて、印鑑押して、また役所に持ってく、というアナログかつ面倒だった手続きを Web 上から行うことができる。
一見便利そうなのだけれども、Windows + IE のみ対応だったり、Java プラグインのインストールが必要だったりで、結局あまり使われていなかったりする。
そこで昨年、e-Gov は API 仕様を公開し、ソフトウェアベンダ各社のクライアントから直接この手続を行えるようにした。実運用はまさにこれから。
外部連携API仕様公開(ソフトウェア開発事業者の方へ)|電子政府の総合窓口e-Gov イーガブ
kiji 公開の意図と経緯
e-Gov 外部連携 API の仕様自体は去年秋ごろに公開されていたのだけれども、
- API の存在自体があまり知られていない
- 個人でこの API 使う開発者は(たぶん)いない
- 企業の開発者は情報出しにくい
- そもそもこの API 使う企業が少ない
という状況で、開発者発信の情報が見つからず、なんとかしたかった。
API 仕様が公開されたことは素晴らしい。けれども中身は大量の PDF と Excel だ。
リクエストには署名付き XML が利用される。レスポンスも JSON ではなく XML だ。
よく訓練された元 SIer(私だ)は既視感とともに軽いノスタルジーを覚えた。
経緯
e-Gov API を知る
e-Gov API 使って社会保険・労働保険の電子申請を楽チンにするぞ - http://t.co/NByjsC5JEv
— K (@kakipo) 2015, 2月 18
疎通できた
やったー。e-Gov API 疎通確認できたよー(^o^)
— K (@kakipo) 2015, 4月 2
愚痴る
斬新な API だ... せめて /access/apply/{SendNumber} と /access/apply?date_from={SendDateFrom}&date_to={SendDateTo} では... pic.twitter.com/IvNlPHxE7G
— K (@kakipo) 2015, 4月 6
"apply" も気に食わない...
— K (@kakipo) 2015, 4月 6
ぶつぶつ
— K (@kakipo) 2015, 4月 6
e-Gov API、仕様書の不具合で絶対に最終試験パスできない状態だった。辛い。
— K (@kakipo) 2015, 4月 8
開き直る
e-Gov API デバッガーになってる。。。
— K (@kakipo) 2015, 4月 27
e-Gov API の地雷はオレが踏みしめておくぜ
— K (@kakipo) 2015, 4月 27
日本のどこかにいる同じような境遇のエンジニアと知見の共有ができると嬉しい。
kiji の使い方
利用者 ID 登録
p12 = OpenSSL::PKCS12.new(p12_file, P12_PIN)
client = Kiji::Client.new do |c|
c.software_id = ENV['EGOV_SOFTWARE_ID']
c.api_end_point = ENV['EGOV_API_END_POINT']
# 証明書 & 秘密鍵の attach
c.cert = p12.certificate
c.private_key = p12.key
end
response = client.register("NEW_USER_ID") # => Faraday::Response
xml = Nokogiri::XML(response.body) # => Nokogiri::XML::Document
xml.at_xpath('//Code').text # => 0(正常終了)
利用者認証
p12 = OpenSSL::PKCS12.new(p12_file, P12_PIN)
client = Kiji::Client.new do |c|
c.software_id = ENV['EGOV_SOFTWARE_ID']
c.api_end_point = ENV['EGOV_API_END_POINT']
# 証明書 & 秘密鍵の attach
c.cert = p12.certificate
c.private_key = p12.key
end
# 利用者認証(Access Key の取得 & 設定)
response = client.login("REGISTERED_USER_ID")
xml = Nokogiri::XML(response.body)
client.access_key = xml.at_xpath('//AccessKey').text
一括申請
p12 = OpenSSL::PKCS12.new(p12_file, P12_PIN)
client = Kiji::Client.new do |c|
c.software_id = ENV['EGOV_SOFTWARE_ID']
c.api_end_point = ENV['EGOV_API_END_POINT']
# 証明書 & 秘密鍵の attach
c.cert = p12.certificate
c.private_key = p12.key
end
# 利用者認証(Access Key の取得 & 設定)
response = client.login("REGISTERED_USER_ID")
xml = Nokogiri::XML(response.body)
client.access_key = xml.at_xpath('//AccessKey').text
# 一括申請
file_name = 'apply.zip'
encoded_data = Base64.encode64(File.new("data/#{file_name}").read)
client.apply(file_name, encoded_data)