Submit Search
URLで遊ぼう
•
Download as PPTX, PDF
•
29 likes
•
6,113 views
Hiraku Nakano
Follow
第62回PHP勉強会で発表した内容です
Read less
Read more
1 of 26
Download now
Downloaded 26 times
More Related Content
URLで遊ぼう
1.
@Hiraku (中野 拓)
2.
@Hiraku (中野 拓) ◦ PHP歴5年ぐらい ◦ Zend Framework, Yaf ◦ http://blog.tojiru.net/ ◦ https://github.com/hirak
3.
URL設計の話
4.
http://example.com/index.php?action=hoge とかだとダサい 短くてCoolなURLにしたい http://twitter.com/Hiraku しかし短すぎると 将来の拡張性が… SEO対策がどうとか
5.
仕様を読みましょう
6.
他にもURLに関するRFC
があるけど、これが最新 RFC3986 http://www.ietf.org/rfc/rfc3986.txt http://www.studyinghttp.net/rfc_ja/rfc3986 (橋本英彦氏による日本語訳)
7.
{scheme}:{authority}{path}?{query}#{fragment} http://example.com/a/b/c.php?q=v#foo
8.
{scheme}:{authority}{path}?{query}#{fragment} http://example.com/a/b/c.php?q=v#foo 固定
ドメイン パラメータ的な使い方 考えるだけ ???
9.
path
= path-abempty ; "/" で始まるか、空 / path-absolute ; "/" で始まるが、"//" では始まらない / path-noscheme ; コロンの無い segment で始まる / path-rootless ; segment で始まる / path-empty ; 文字が無い path-abempty = *( "/" segment ) path-absolute = "/" [ segment-nz *( "/" segment ) ] path-noscheme = segment-nz-nc *( "/" segment ) path-rootless = segment-nz *( "/" segment ) path-empty = 0<pchar> segment = *pchar segment-nz = 1*pchar segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" ) ; non-zero-length segment without any colon ":" pchar = unreserved / pct-encoded / sub-delims / ":" / "@
10.
使ってよい文字 ◦ 非予約文字(unreserved-character) [0-9A-Za-z._~-] ◦ %エンコードされた文字 ◦ 予約文字のうちのsub-delims [!$&'()*+,;=] ◦ 予約文字のうちのgen-delimsの一部 [@/:]
11.
0 1 2
3 4 5 6 7 8 9 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz . _ ~ - ! $ & ' ( ) * + , ; = @ / :
12.
URLに使える文字は 英数字と / だけ ではない!!
13.
デモ
14.
0 1 2
3 4 5 6 7 8 9 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz . _ ~ - ! $ & ' ( ) * + , ; = @ / : 四則演算 できるよね
15.
http://calc.tojiru.net/1+2 http://calc.tojiru.net/2-1 http://calc.tojiru.net/(1+2)*10/2 URLとして妥当 リクエストすると計算結果がtext/plainで返って くる
16.
0 1 2
3 4 5 6 7 8 9 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz . _ ~ - ! $ & ' ( ) * + , ; = @ / : PHP!?
17.
/$a=1;$b=2;echo($a+$b); /$a=array(1,2,3);echo(implode(':',$a)); <?php $code = ltrim($_SERVER['REQUEST_URI'], '/'); eval($code); $ php -S localhost:8080 index.php ローカルで実験しましょうね
18.
スペースが書けないのでclassやfunctionが無理 echoは()が必要になる []が書けないので添え字アクセスも無理 "も書けない できないところも多い
19.
実践的な話
20.
縛りプレイ ◦ 使っている文字が少なすぎる ◦ /と[0-9A-Za-z._-]だけでURL作るとか厳しい ◦ /は「階層」の意味合いを感じてしまう
21.
/map/lat/50/long/20/scale/32000 こういうURL設計を強要するフレームワーク、 よくあるよね ◦ lat(経度)とlong(緯度)は階層じゃない ◦ lat/50とlong/20を入れ替えても動作する方がいい /map?lat=50&long=20&scale=32000 ◦ 入れ替え可能だし階層っぽさは消えた
22.
Tim Berners-Leeによる提案 http://www.w3.org/DesignIssues/MatrixURIs.html /map;lat=50;long=20;scale=32000 ◦ セミコロンによるqueryと同等の記述 ◦ queryを使っていないところに意味がある
23.
/user;id=123/friends ◦ 後ろに階層を続けることができる ◦ クエリはURL中一度しか使えないので、 Matrix URIの方が拡張性高い ◦ パスの途中にパラメータを仕込む構文が可能 →覚えておくと何かと便利
24.
まとめ
25.
URLの記述力はすごい "/" 以外のsub-delimsを使えば世界が広がる みんなもっとURLで遊べばいい
26.
別に「URL設計はこうあるべき」とか論じる気は ない ◦ そんなのサービスによって変わるし その前に選択肢を知るべきだ 自分で制限して自分で苦しむなんて、バカみたい じゃないか
Download