TIL
rake の補完が遅くてイライラするのを解消した
RSpec で 特定のコンテキストだけ before をスキップしたい
- Coderwall | Skipping
before
hook for a few test cases in Rspec - 親コンテキストでまとめて before してるケースで、例外が発生する子コンテキストのテストで before が使えなかったので
- Coderwall | Skipping
xxxx_path
,xxxx_url
の使い分け
Redcarpet の辛いところ
TOC(Table Of Contents) を生成する機能があるのだけど、 見出しに日本語が含まれていると、完全にスルーされてしまう点。
## これは概要です
これを redcarpet のレンダリング処理にかませると・・・
<h2 name="">これは概要です</h2>
といった具合。
## This is overview
だと
<h2 name="this-is-overview">これは概要です</h2>
となる。。。
これは辛いのでJSで h1
等から自動的にTOCを組み立てるライブラリも試してみたものの、
かなりのライブラリが日本語をスルーしてしまう・・
この辺りはどう乗り切ってるのかな
204 No Content について
前回の記事 prmd の辛いところ で「手続きクラスをコールするだけのAPIの返り値は No Content
で構わない」と書いたものの、
もし今後なんらかの JSON
を返却する必要がでてきたら?と考えると、
最初から HTTP/1.1 200 OK
としておくべきな気がしてきた。
Response は empty
としかったのはドキュメント上でも、
レスポンスサンプルが
{}
だけとなってしまって、意図してこうなっているのかわかりづらいので、
意味のない JSON
を返すくらいなら、実体としては No Content
なのだから、
HTTP/1.1 204 No Content
でいいじゃない、という発想だったのだけど、
もし JSON
の返却要件が追加されたら、当然ステータスコードは 200
や 201
になりうるので、
その時点でステータスコードが変わってしまうのはイマイチ君な気がする。
だったら最初から 200
を返しつつ、空 JSON
をレスポンスにしておくのが正しい気がする。
(200
にしたけど、やっぱり実装が変わって、
何かリソースを作成、リダイレクトしたいから 201
にするべきってなったらどうするんだというモヤモヤが新たに・・)
prmd の辛いところ
HTTP/1.1 204 No Content
HTTP/1.1 200 OK
+Response は empty
みたいな表現ができない。 いや、正確にはカスタム erb テンプレートを全部自分で用意すればできるのだけど、 templates 全体をコピーして持ってくる必要があったりして、保守観点でやや懸念が残る。
手続きクラスをコールするだけのAPIの返り値は No Content
で構わないのだけど、
prmd
で No Content
を表現すると、rel: 'empty'
とするしかなくて、
これをやるとステータスコードは 202
となってしまう。
202
の Heroku における定義 だと、
202
は equest accepted, but the processing has not been completed
となっている。
元々 202
ってそういうものだよね、とは思いつつ 手続きクラスがコールされた時点で処理は完了しているのに、
202
を返すところにモヤモヤを感じてしまう。
overview
で、うちの 202
はこういう定義だって言い張るのありっちゃありだろうけど、
本当の意味で 202
を返したい場合はどうするやってなってしまうしなぁ・・・
う〜ん やっぱり適切なステータスコードを返すべきな気がするのでカスタムテンプレートでいくべきだ。
prmd と jdoc で JSON Schema の解釈が微妙に違う問題
要するに JSON Schema を解釈して何かするライブラリによって方言が存在する状態になっている。
jdoc
は 204
を表現できるけど、prmd
は 202
となっている他、
status code の表現に使う場所が
def has_response_body? @raw_link.media_type != "null" end # @return [Fixnum] Preferred respone status code for this endpoint def response_status case when method == "POST" 201 when has_response_body? 200 else 204 end end
HTTP/1.1 <%= case link['rel'] when 'create' '201 Created' when 'empty' '202 Accepted' else '200 OK' end %>
みたいな状態。
jdoc
は media_type
属性に null
を指定すれば 204
だし、
prmd
は rel
属性に empty
を指定すれば 202
・・・
prmd
のほうでは 202
の代わりに 204
にしないの?みたいな話が上がってたり
- empty should probably be 204 instead of 202 · Issue #208 · interagent/prmd
- issues with rel=empty · Issue #169 · interagent/prmd
結局 JSON Schema の仕様が完璧じゃないから、実装によってその辺りがブレるんじゃねっていう状態なのかも・・
とりあえず、利用者も多そうだし、Heroku がメンテしているということで、prmd
に寄せていくことにする。