/
728.txt
162 lines (120 loc) · 7.32 KB
/
728.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
[18] [DFN[[[REST]]]] は、 [[Web]] の[[プロトコル]]や [[API]]
の設計に大きな影響を与えた[RUBYB[[[体系様式]]]@en[architectural style]]です。
;; [19] 現在では「[[REST]]」の意味は発散しており、 「[[Web]]
を使った何か」程度の言葉と理解するべきかもしれません。
* REST に従っていると主張されるものの例
[30] [[REST]] に沿っていることを [DFN[[[RESTful]]]] といいます。
;; 具体的にどんな条件が満たされれば [[RESTful]] と言えるかは定かではありません。
色々な人が好き勝手なことを言っています。
[31] [[REST]] に従っていると設計者または利用者等が主張している[[プロトコル]]には、
次のものがあります。
[FIG(short list)[
- [[HTTP]]
- [[SOAP 1.2]]
- [[WSDL]]
- [[AtomPub]]
- [[LDP]]
- [[CoAP]]
- [[OData]]
]FIG]
[32] その他いろいろな [[Web API]] が [[RESTful]] であるなどと主張しています。
;; 「REST API」と言ったり「RESTful API」と言ったりしますが、
どちらも同じ意味です。 (そしてどちらも「Web API」と大して意味は違いません。)
* 「REST API」による HTTP の濫用例
[14] 近年の「REST」API の類は従来 [[URL]] に含めていたデータを [[HTTP]]
の機能で表すのが [[cool]] だと思っているようです。 そのような例は:
[FIG(list)[
- [17] 操作の種類を[[要求メソッド]] [CODE(HTTP)@en[[[PUT]]]]、
[CODE(HTTP)@en[[[DELETE]]]]、[CODE(HTTP)@en[[[PATCH]]]] として表す
- [15] [[API]] の版を独自の [[MIME型]]で表し [CODE(HTTP)@en[[[Accept:]]]] に含める
- [16] [[ページ番号]]を[[範囲単位]] [CODE(HTTP)@en[[[items]]]] で表す
- [23] 出力のデータ形式を [CODE(HTTP)@en[[[Accept:]]]] [[ヘッダー]]で表す
- [24] 出力のバリエーションを [CODE(HTTP)@en[[[Prefer:]]]] [[ヘッダー]]で表す
- [33] [[API]] の[[版]]を独自の [[HTTPヘッダー]]で表す
- [28] [[要求]]に関するその他の[[引数]]を独自の[[HTTPヘッダー]]で表す
]FIG]
[20] こういうのって「なんでも [[URI]] で表せる」という [[Semantic Web]]
的世界観とは矛盾する気がしますが、 [[REST]] 系の人は気にしないのですかね。
[29] 実際不便だからか何なのか、[[ヘッダー]]等による指定だけでなく
[[URL query]] などの指定もできるようにしている [[API]] も少なからずあります。
実装コストや不具合リスクが上がるだけで何も得していない気がしますが・・・。
[25] 関連する [[JSON]] [[Web API]] の [[URL]] を [[JSON]] [[応答]]内に含める
[[HAL]] 的なものを好ましいと思っている人達 (その人達もそのやり方が [[REST]]
っぽくて [[cool]] だと思っていそう...) のやり方とも衝突するような気がしないでもない。。。
* REST と対立すると言われるものの例
[38] 次のものは [[REST]] と対立する技術だったり、 [[REST]] でないと言われたりする要素です。
[FIG(list)[
- [[RPC]]
- [[XML-RPC]]
- [[SOAP]]
- [[JSON-RPC]]
- [[URL]] に動作が含まれる
- [CODE(HTTP)@en[[[GET]]]] や [CODE(HTTP)@en[[[POST]]]] しか使わない
- [[HTTP]] [[状態符号]]をあまり活用しない
- [[ハイパーメディア]]を使わない
]FIG]
[35] [[RPC]] は [[REST]] でないというのが一般的な見解のようですが、
[[RPC]] を [[REST]] で作ったなどと主張するものもあったりするようです。
[36] [[REST-RPC]] が [[REST]] なのか [[RPC]] なのか両方なのかどちらでもないのかよくわかりません。
[[REST-RPC]] が [[REST]] であったり [[REST]] でなかったりすることもあるようです。
[37] [[SOAP]] は元々 [[REST]] とは対立するものだったのが、 [[W3C]] で [[SOAP 1.2]]
を開発した結果 [[REST]] になった、とされています。
* メモ
[1]
[CITE[傭兵日記: REST の日本語リソース]] <http://yohei-y.blogspot.com/2004/12/rest.html>
([[名無しさん]])
[2]
- [CITE[How I explained REST to my wife...]] <http://naeblis.cx/rtomayko/2004/12/12/rest-to-my-wife>
- [CITE[奥さんに REST をどう説明したかというと…]] <http://www.geocities.jp/yamamotoyohei/rest/rest-to-my-wife.htm>
妙に理解力のある奥さんだ[AA[w]]
([[名無しさん]])
[3]
[CITE[傭兵日記: REST 入門]] <http://yohei-y.blogspot.com/2005/04/rest_23.html>
([[名無しさん]])
[4]
[CITE[REST - 羊堂本舗 ちょき]] <http://sheepman.parfait.ne.jp/wiki/REST>
([[名無しさん]])
[5]
[CITE[Architectural Styles and the Design of Network-based Software Architectures]] <http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm>
([[名無しさん]])
[6]
[CITE[川o・-・)<2nd life - RESTWiki]] <http://d.hatena.ne.jp/secondlife/20050914/1126631161>
([[名無しさん]])
[7]
[CITE[はてなブックマーク - 第八回XML開発者の日]] <http://b.hatena.ne.jp/entry/http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu8.html>
([[名無しさん]] [WEAK[2005-11-26 01:55:52 +00:00]])
[8]
[CITE[REST でよくある間違い]] <http://www.geocities.jp/yamamotoyohei/rest/mistakes.html>
([[名無しさん]] [WEAK[2005-11-27 02:02:40 +00:00]])
[9]
[CITE[rest - Microformats]] <http://microformats.org/wiki/rest/>
([[名無しさん]] [WEAK[2005-11-29 10:24:42 +00:00]])
[10]
[CITE[RestWiki: Front Page]] <http://rest.blueoxen.net/cgi-bin/wiki.pl?FrontPage>
([[名無しさん]] [WEAK[2006-07-16 08:42:33 +00:00]])
[26] 最初は [[XML-RPC]] や [[SOAP]] のようなものに対する [[REST]]
という対立構造だった気がしますが、いつの間にか [[SOAP 1.2]] は「REST に基づいている」
みたいなことになっていた。。。
[11]
[CITE[スラッシュドット ジャパン | ミクシィ、画像に認可制御なしの欠陥を改修できず、ヘルプで弁解]] <http://slashdot.jp/security/article.pl?sid=06/10/17/1958219&from=rss>
([[名無しさん]] [WEAK[2006-10-20 00:35:24 +00:00]])
[27] その後 [[SOAP]] などが話題にもならなくなって、 [[REST]]
という言葉も忘れ去られていくのかと思っていたら、
10年代になってまた (10年ぶりくらいに) 流行りだした...
[13] 最近は [[REST]] の意味もよくわからなくなってきましたね。みんな自分の好きなスタイルのことを
[[REST]] と呼んで自己正当化してるだけのような・・・。
[12] [CITE@en[RESTful API Design, Second Edition]]
( ([TIME[2013-02-08 03:24:31 +09:00]] 版))
<http://www.slideshare.net/apigee/restful-api-design-second-edition>
[21] [CITE[続・コマンド的な処理をどうやってRESTfulに実装するか - 岩本隆史の日記帳]]
( ([TIME[2012-04-12 08:38:46 +09:00]] 版))
<http://d.hatena.ne.jp/IwamotoTakashi/20090326/p1>
[22] [CITE[技術/HTTP/REST設計思想の "Stateless" との付き合い方 - Glamenv-Septzen.net]]
([TIME[2015-02-13 16:40:15 +09:00]] 版)
<http://www.glamenv-septzen.net/view/1350>
[FIG(amazon)[
[[REST]]
]FIG]
[34] [CITE[REST APIs must be hypertext-driven » Untangled]]
([TIME[2015-11-19 13:20:21 +09:00]] 版)
<http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven>