狠狠撸

狠狠撸Share a Scribd company logo
@Hiraku
(中野 拓)
?   @Hiraku (中野 拓)
    ? PHP歴5年ぐらい

    ? Zend Framework, Yaf

    ? http://blog.tojiru.net/
    ? https://github.com/hirak
鲍搁尝设计の话
?   http://example.com/index.php?action=hoge
    とかだとダサい

?   短くてCoolなURLにしたい
    http://twitter.com/Hiraku

?   しかし短すぎると
    将来の拡張性が…
?   SEO対策がどうとか
仕様を読みましょう
他にも鲍搁尝に関する搁贵颁
                         があるけど、これが最新




RFC3986
http://www.ietf.org/rfc/rfc3986.txt


http://www.studyinghttp.net/rfc_ja/rfc3986
(橋本英彦氏による日本語訳)
{scheme}:{authority}{path}?{query}#{fragment}

http://example.com/a/b/c.php?q=v#foo
{scheme}:{authority}{path}?{query}#{fragment}

http://example.com/a/b/c.php?q=v#foo

固定       ドメイン                  パラメータ的な使い方
        考えるだけ




                    ???
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 / ":" / "@
?   使ってよい文字
    ? 非予約文字(unreserved-character)
     [0-9A-Za-z._~-]

    ? %エンコードされた文字

    ? 予約文字のうちのsub-delims
     [!$&'()*+,;=]

    ? 予約文字のうちのgen-delimsの一部
     [@/:]
0 1 2 3 4 5 6 7 8 9
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
. _ ~ -
! $ & ' ( ) * + , ; =
@ / :
URLに使える文字は
英数字と / だけ
ではない!!
デモ
0 1 2 3 4 5 6 7 8 9
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
. _ ~ -
! $ & ' ( ) * + , ; =
@ / :

            四則演算
           できるよね
?   http://calc.tojiru.net/1+2
?   http://calc.tojiru.net/2-1
?   http://calc.tojiru.net/(1+2)*10/2

?   URLとして妥当

?   リクエストすると計算結果がtext/plainで返って
    くる
0 1 2 3 4 5 6 7 8 9
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
. _ ~ -
! $ & ' ( ) * + , ; =
@ / :

            PHP!?
?   /$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

?   ローカルで実験しましょうね
?   スペースが書けないのでclassやfunctionが無理
?   echoは()が必要になる
?   []が書けないので添え字アクセスも無理
?   "も書けない

?   できないところも多い
実践的な话
?   縛りプレイ
    ? 使っている文字が少なすぎる

    ? /と[0-9A-Za-z._-]だけでURL作るとか厳しい

    ? /は「階層」の意味合いを感じてしまう
?   /map/lat/50/long/20/scale/32000
?   こういうURL設計を強要するフレームワーク、
    よくあるよね

    ? lat(経度)とlong(緯度)は階層じゃない
    ? lat/50とlong/20を入れ替えても動作する方がいい

?   /map?lat=50&long=20&scale=32000

    ? 入れ替え可能だし階層っぽさは消えた
?   Tim Berners-Leeによる提案
    http://www.w3.org/DesignIssues/MatrixURIs.html

?   /map;lat=50;long=20;scale=32000

    ? セミコロンによるqueryと同等の記述
    ? queryを使っていないところに意味がある
?   /user;id=123/friends

    ? 後ろに階層を続けることができる
    ? クエリはURL中一度しか使えないので、
      Matrix URIの方が拡張性高い

    ? パスの途中にパラメータを仕込む構文が可能
      →覚えておくと何かと便利
まとめ
?   URLの記述力はすごい

?   "/" 以外のsub-delimsを使えば世界が広がる

?   みんなもっとURLで遊べばいい
?   別に「URL設計はこうあるべき」とか論じる気は
    ない
    ? そんなのサービスによって変わるし

?   その前に選択肢を知るべきだ

?   自分で制限して自分で苦しむなんて、バカみたい
    じゃないか

More Related Content

What's hot (20)

PDF
How to run P4 BMv2
Kentaro Ebisawa
?
PDF
レシピの作り方入门
Nobuhiro Iwamatsu
?
PDF
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
?
PDF
厂肠补辫测て?作る?解析するハ?ケット
Takaaki Hoyo
?
PDF
谜の言语贵辞谤迟丑が谜なので実装した
t-sin
?
PDF
贰迟丑别谤苍别迟の受信処理
Takuya ASADA
?
PDF
月間10億pvを支えるmongo db
Yuji Isobe
?
PDF
顿辞肠办别谤の期待と现実~顿辞肠办别谤都市伝説はなぜ生まれるのか~
Masahito Zembutsu
?
PDF
顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
Kohei Tokunaga
?
PDF
こんなに使える!今どきの础笔滨ドキュメンテーションツール
dcubeio
?
PDF
Internet Week 2018 知っておくべきIPv6とセキュリティの話
Akira Nakagawa
?
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
?
PDF
???? ??? ???, ??? ???
Kyuhyun Byun
?
PDF
尝颈苍耻虫にて复数のコマンドを并列実行(同时実行数の制限付き)
Hiro H.
?
ODP
Android デバッグ小ネタ
l_b__
?
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
?
PDF
颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善
Ito Takayuki
?
PDF
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
Unity Technologies Japan K.K.
?
PDF
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
Takaya Saeki
?
PDF
翱颁滨ランタイムの笔头「谤耻苍肠」を俯瞰する
Kohei Tokunaga
?
How to run P4 BMv2
Kentaro Ebisawa
?
レシピの作り方入门
Nobuhiro Iwamatsu
?
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
?
厂肠补辫测て?作る?解析するハ?ケット
Takaaki Hoyo
?
谜の言语贵辞谤迟丑が谜なので実装した
t-sin
?
贰迟丑别谤苍别迟の受信処理
Takuya ASADA
?
月間10億pvを支えるmongo db
Yuji Isobe
?
顿辞肠办别谤の期待と现実~顿辞肠办别谤都市伝説はなぜ生まれるのか~
Masahito Zembutsu
?
顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
Kohei Tokunaga
?
こんなに使える!今どきの础笔滨ドキュメンテーションツール
dcubeio
?
Internet Week 2018 知っておくべきIPv6とセキュリティの話
Akira Nakagawa
?
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
?
???? ??? ???, ??? ???
Kyuhyun Byun
?
尝颈苍耻虫にて复数のコマンドを并列実行(同时実行数の制限付き)
Hiro H.
?
Android デバッグ小ネタ
l_b__
?
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
?
颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善
Ito Takayuki
?
【Unity道場スペシャル 2017京都】スマホゲーム開発者なら知っておくべきチートのリスク&対策
Unity Technologies Japan K.K.
?
奥别产础蝉蝉别尘产濒测の奥别产以外のことぜんぶ话す
Takaya Saeki
?
翱颁滨ランタイムの笔头「谤耻苍肠」を俯瞰する
Kohei Tokunaga
?

Viewers also liked (20)

PDF
南海大餐辫诲蹿
Wenjing Fei
?
PDF
Notafilia moedas comunitárias de portugal
Miguel Yasuyuki Hirota
?
PPT
依纳五穗种子-公民记者分享-中部聚会
peopo
?
PPT
别濒濒别苍濒别别-公民记者分享-中部聚会
peopo
?
PPTX
苍补迟耻谤别23-公民记者分享-中部聚会
peopo
?
XLS
Hrd recruitment track report no3_book1(1)
Confidential
?
PPS
卢广《中国的污染》
saymynames
?
PPTX
Harsh Climate for Human Rights Defenders in China:2014 in Photos 中国大陆人权捍卫者面临严...
CHRDnet
?
PDF
what it means for PKP to offer Article Level Metrics
SciELO - Scientific Electronic Library Online
?
DOCX
08级第七批警务援助队绵竹教学实践活动自我鉴定报告
Luchuan Wang
?
PDF
Redmine 260 300_new_feature
Jun Naitoh
?
PPTX
CHRD’s image gallery of the year in human rights defense in China
CHRDnet
?
PPTX
La ONU
FabiolaZelaya
?
PPTX
Final slideshow hrd 2013 report
CHRDnet
?
PDF
It from bit
Nguyen Trung
?
PDF
「通貨と持続可能性: 見失われた関連性」要約
Miguel Yasuyuki Hirota
?
PPTX
China, Law and the Foreigner: Mutual Engagements on a Global Stage
Larry Catá Backer
?
PPT
Recruitment -hrd 2 report (1)
Emmanuel Nadela
?
PPTX
Enterprise grade firewall and ssl termination to ac by will stevens
buildacloud
?
南海大餐辫诲蹿
Wenjing Fei
?
Notafilia moedas comunitárias de portugal
Miguel Yasuyuki Hirota
?
依纳五穗种子-公民记者分享-中部聚会
peopo
?
别濒濒别苍濒别别-公民记者分享-中部聚会
peopo
?
苍补迟耻谤别23-公民记者分享-中部聚会
peopo
?
Hrd recruitment track report no3_book1(1)
Confidential
?
卢广《中国的污染》
saymynames
?
Harsh Climate for Human Rights Defenders in China:2014 in Photos 中国大陆人权捍卫者面临严...
CHRDnet
?
what it means for PKP to offer Article Level Metrics
SciELO - Scientific Electronic Library Online
?
08级第七批警务援助队绵竹教学实践活动自我鉴定报告
Luchuan Wang
?
Redmine 260 300_new_feature
Jun Naitoh
?
CHRD’s image gallery of the year in human rights defense in China
CHRDnet
?
Final slideshow hrd 2013 report
CHRDnet
?
It from bit
Nguyen Trung
?
「通貨と持続可能性: 見失われた関連性」要約
Miguel Yasuyuki Hirota
?
China, Law and the Foreigner: Mutual Engagements on a Global Stage
Larry Catá Backer
?
Recruitment -hrd 2 report (1)
Emmanuel Nadela
?
Enterprise grade firewall and ssl termination to ac by will stevens
buildacloud
?
Ad

Similar to 鲍搁尝で游ぼう (20)

PDF
Write good parser in perl
Jiro Nishiguchi
?
PDF
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
?
PDF
Apacheの展望とmod_perlの超絶技巧 #yapcasia
鉄次 尾形
?
PPTX
知ってるようで意外と知らない笔贬笔の便利関数
Wataru Terada
?
PDF
メタメタプログラミング搁耻产测
emasaka
?
PPTX
PHP AST 徹底解説
do_aki
?
PPTX
Php in ruby
do_aki
?
KEY
惭辞箩辞濒颈肠颈辞耻蝉をウェブ制作现场で使ってみてる
jamadam
?
PPT
2008.10.18 L4u Tech Talk
mitamex4u
?
PDF
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
?
PDF
MT meets PHP - PHP conference Kansai 2013
純生 野田
?
PPT
How to debug a perl script using gdb
akirahiguchi
?
PDF
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
?
PPT
颁笔础狈の依存モジュールをもう少し正しく検出したい
charsbar
?
PPTX
20190809
iPride Co., Ltd.
?
PDF
Phpmatsuri2011 LT j_nakada
Junpei Nakada
?
PDF
知って得する颁#
Shota Baba
?
PDF
Ruby 2.5
Masahiro Tomita
?
PDF
Dive into RTS - another side
Kiwamu Okabe
?
Write good parser in perl
Jiro Nishiguchi
?
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
?
Apacheの展望とmod_perlの超絶技巧 #yapcasia
鉄次 尾形
?
知ってるようで意外と知らない笔贬笔の便利関数
Wataru Terada
?
メタメタプログラミング搁耻产测
emasaka
?
PHP AST 徹底解説
do_aki
?
Php in ruby
do_aki
?
惭辞箩辞濒颈肠颈辞耻蝉をウェブ制作现场で使ってみてる
jamadam
?
2008.10.18 L4u Tech Talk
mitamex4u
?
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
?
MT meets PHP - PHP conference Kansai 2013
純生 野田
?
How to debug a perl script using gdb
akirahiguchi
?
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
?
颁笔础狈の依存モジュールをもう少し正しく検出したい
charsbar
?
Phpmatsuri2011 LT j_nakada
Junpei Nakada
?
知って得する颁#
Shota Baba
?
Dive into RTS - another side
Kiwamu Okabe
?
Ad

More from Hiraku Nakano (9)

PDF
肠辞尘辫辞蝉别谤-蝉肠谤颈辫迟蝉について
Hiraku Nakano
?
PDF
composerの遅さをまじめに考える #phpstudy
Hiraku Nakano
?
PDF
Composer並列化プラグイン #phpblt
Hiraku Nakano
?
PDF
Scrutinizer CIでPHPも静的解析 #phpstudy
Hiraku Nakano
?
PDF
JSON SchemaとPHP
Hiraku Nakano
?
PDF
こわくない同时実行制御
Hiraku Nakano
?
PDF
PSR-3 Logger Interfaceの紹介
Hiraku Nakano
?
PPTX
辫别肠濒-础翱笔の绍介
Hiraku Nakano
?
PPTX
Xml builderの紹介
Hiraku Nakano
?
肠辞尘辫辞蝉别谤-蝉肠谤颈辫迟蝉について
Hiraku Nakano
?
composerの遅さをまじめに考える #phpstudy
Hiraku Nakano
?
Composer並列化プラグイン #phpblt
Hiraku Nakano
?
Scrutinizer CIでPHPも静的解析 #phpstudy
Hiraku Nakano
?
JSON SchemaとPHP
Hiraku Nakano
?
こわくない同时実行制御
Hiraku Nakano
?
PSR-3 Logger Interfaceの紹介
Hiraku Nakano
?
辫别肠濒-础翱笔の绍介
Hiraku Nakano
?
Xml builderの紹介
Hiraku Nakano
?

鲍搁尝で游ぼう

  • 2. ? @Hiraku (中野 拓) ? PHP歴5年ぐらい ? Zend Framework, Yaf ? http://blog.tojiru.net/ ? https://github.com/hirak
  • 4. ? http://example.com/index.php?action=hoge とかだとダサい ? 短くてCoolなURLにしたい http://twitter.com/Hiraku ? しかし短すぎると 将来の拡張性が… ? SEO対策がどうとか
  • 6. 他にも鲍搁尝に関する搁贵颁 があるけど、これが最新 RFC3986 http://www.ietf.org/rfc/rfc3986.txt http://www.studyinghttp.net/rfc_ja/rfc3986 (橋本英彦氏による日本語訳)
  • 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 . _ ~ - ! $ & ' ( ) * + , ; = @ / :
  • 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は()が必要になる ? []が書けないので添え字アクセスも無理 ? "も書けない ? できないところも多い
  • 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の方が拡張性高い ? パスの途中にパラメータを仕込む構文が可能 →覚えておくと何かと便利
  • 25. ? URLの記述力はすごい ? "/" 以外のsub-delimsを使えば世界が広がる ? みんなもっとURLで遊べばいい
  • 26. ? 別に「URL設計はこうあるべき」とか論じる気は ない ? そんなのサービスによって変わるし ? その前に選択肢を知るべきだ ? 自分で制限して自分で苦しむなんて、バカみたい じゃないか