wadl 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +676 -0
- data/ChangeLog +5 -0
- data/README +75 -0
- data/Rakefile +23 -0
- data/examples/YahooSearch.rb +7 -0
- data/examples/YahooSearch.wadl +88 -0
- data/examples/crummy.rb +17 -0
- data/examples/crummy.wadl +34 -0
- data/examples/delicious.rb +24 -0
- data/examples/delicious.wadl +348 -0
- data/examples/yahoo.rb +14 -0
- data/examples/yahoo.wadl +37 -0
- data/lib/wadl/version.rb +27 -0
- data/lib/wadl.rb +1263 -0
- data/test/test_wadl.rb +303 -0
- metadata +112 -0
data/README
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
= wadl - Ruby client for the Web Application Description Language.
|
2
|
+
|
3
|
+
== VERSION
|
4
|
+
|
5
|
+
This documentation refers to wadl version 0.1.1
|
6
|
+
|
7
|
+
|
8
|
+
== DESCRIPTION
|
9
|
+
|
10
|
+
This is a Ruby client for the Web Application Description Language. It
|
11
|
+
hides the details of HTTP communication between a web service client
|
12
|
+
and a REST or HTTP+POX web service.
|
13
|
+
|
14
|
+
We hope that WADL descriptors and client libraries will replace
|
15
|
+
one-off wrapper libraries specific to one service and one programming
|
16
|
+
language -- or at least make such wrapper libraries much easier to
|
17
|
+
write.
|
18
|
+
|
19
|
+
=== Interesting Features:
|
20
|
+
|
21
|
+
* Traversing the tree of resources is like traversing a data
|
22
|
+
structure. Here's code to get recent posts from del.icio.us:
|
23
|
+
|
24
|
+
WADL::Application.from_wadl(open("delicious.wadl")).v1.posts.recent.get
|
25
|
+
|
26
|
+
* Faults are custom subclasses named after the fault ID. You can catch
|
27
|
+
specific faults.
|
28
|
+
|
29
|
+
* You can bind some parameters (such as authentication parameters or
|
30
|
+
API keys) permanently to the WADL application, and leave others (such
|
31
|
+
as search queries) to be bound differently for each request.
|
32
|
+
|
33
|
+
* This feature isn't in the WADL standard yet: you can define
|
34
|
+
"header"-style parameters to be included in the HTTP request
|
35
|
+
headers. See delicious.wadl for an example.
|
36
|
+
|
37
|
+
=== Shortcomings:
|
38
|
+
|
39
|
+
The 20060802 WADL standard is almost entirely supported. However,
|
40
|
+
|
41
|
+
* XML grammars are more or less ignored
|
42
|
+
* As are links
|
43
|
+
|
44
|
+
|
45
|
+
== LINKS
|
46
|
+
|
47
|
+
<b></b>
|
48
|
+
Homepage:: <http://www.crummy.com/software/wadl.rb/>
|
49
|
+
WADL:: <http://wadl.dev.java.net/>
|
50
|
+
Documentation:: <http://rdoc.info/projects/blackwinter/wadl>
|
51
|
+
Source code:: <http://github.com/blackwinter/wadl>
|
52
|
+
|
53
|
+
|
54
|
+
== AUTHORS
|
55
|
+
|
56
|
+
* Leonard Richardson <mailto:leonardr@segfault.org> (Original author)
|
57
|
+
* Jens Wille <mailto:jens.wille@uni-koeln.de>
|
58
|
+
|
59
|
+
|
60
|
+
== LICENSE AND COPYRIGHT
|
61
|
+
|
62
|
+
Copyright (C) 2006-2008 Leonard Richardson
|
63
|
+
Copyright (C) 2010 Jens Wille
|
64
|
+
|
65
|
+
wadl is free software: you can redistribute it and/or modify it under
|
66
|
+
the terms of the GNU General Public License as published by the Free Software
|
67
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
68
|
+
version.
|
69
|
+
|
70
|
+
wadl is distributed in the hope that it will be useful, but WITHOUT
|
71
|
+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
72
|
+
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
73
|
+
|
74
|
+
You should have received a copy of the GNU General Public License along with
|
75
|
+
wadl. If not, see <http://www.gnu.org/licenses/>.
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require %q{lib/wadl/version}
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'hen'
|
5
|
+
|
6
|
+
Hen.lay! {{
|
7
|
+
:gem => {
|
8
|
+
:name => %q{wadl},
|
9
|
+
:version => WADL::VERSION,
|
10
|
+
:summary => %q{Ruby client for the Web Application Description Language.},
|
11
|
+
:authors => ['Leonard Richardson', 'Jens Wille'],
|
12
|
+
:email => ['leonardr@segfault.org', 'jens.wille@uni-koeln.de'],
|
13
|
+
:homepage => 'http://github.com/blackwinter/wadl',
|
14
|
+
:files => FileList['lib/**/*.rb'].to_a,
|
15
|
+
:extra_files => FileList['[A-Z]*', 'examples/*', 'test/**/*.rb'].to_a,
|
16
|
+
:dependencies => %w[rest-open-uri mime-types]
|
17
|
+
}
|
18
|
+
}}
|
19
|
+
rescue LoadError
|
20
|
+
abort "Please install the 'hen' gem first."
|
21
|
+
end
|
22
|
+
|
23
|
+
### Place your custom Rake tasks here.
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'wadl'
|
2
|
+
|
3
|
+
yahoo = WADL::Application.from_wadl(open("YahooSearch.wadl"))
|
4
|
+
expected_representation = yahoo.newsSearch.search.response.representations[0]
|
5
|
+
result = yahoo.newsSearch.get(:query => {:appid => "selectric", :query => "bar"},
|
6
|
+
:expected_representation => expected_representation)
|
7
|
+
puts result.representation
|
@@ -0,0 +1,88 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<!--
|
3
|
+
The contents of this file are subject to the terms
|
4
|
+
of the Common Development and Distribution License
|
5
|
+
(the "License"). You may not use this file except
|
6
|
+
in compliance with the License.
|
7
|
+
|
8
|
+
You can obtain a copy of the license at
|
9
|
+
http://www.opensource.org/licenses/cddl1.php
|
10
|
+
See the License for the specific language governing
|
11
|
+
permissions and limitations under the License.
|
12
|
+
-->
|
13
|
+
<application xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
14
|
+
xmlns:yn="urn:yahoo:yn"
|
15
|
+
xmlns:ya="urn:yahoo:api"
|
16
|
+
xmlns:html="http://www.w3.org/1999/xhtml"
|
17
|
+
xmlns="http://research.sun.com/wadl/2006/07">
|
18
|
+
|
19
|
+
<grammars>
|
20
|
+
<include href="NewsSearchResponse.xsd"/>
|
21
|
+
<include href="NewsSearchError.xsd"/>
|
22
|
+
</grammars>
|
23
|
+
|
24
|
+
<resources base="http://api.search.yahoo.com/NewsSearchService/V1/">
|
25
|
+
<resource path="newsSearch">
|
26
|
+
<doc xml:lang="en" title="Yahoo News Search Service">
|
27
|
+
The <html:i>Yahoo News Search</html:i> service provides online searching of news
|
28
|
+
stories from around the world.
|
29
|
+
</doc>
|
30
|
+
<param name="appid" type="xsd:string" required="true" style="form">
|
31
|
+
<doc>The application ID. See <html:a href="http://developer.yahoo.com/faq/index.html#appid">Application IDs</html:a> for more information.</doc>
|
32
|
+
</param>
|
33
|
+
<method href="#search"/>
|
34
|
+
</resource>
|
35
|
+
</resources>
|
36
|
+
|
37
|
+
<method name="GET" id="search">
|
38
|
+
<doc xml:lang="en" title="Search news stories by keyword"/>
|
39
|
+
<request>
|
40
|
+
<param name="query" type="xsd:string" required="true">
|
41
|
+
<doc xml:lang="en" title="Space separated keywords to search for"/>
|
42
|
+
</param>
|
43
|
+
<param name="type" type="xsd:string" default="all">
|
44
|
+
<doc xml:lang="en" title="Keyword matching"/>
|
45
|
+
<option value="all">
|
46
|
+
<doc>All query terms.</doc>
|
47
|
+
</option>
|
48
|
+
<option value="any">
|
49
|
+
<doc>Any query terms.</doc>
|
50
|
+
</option>
|
51
|
+
<option value="phrase">
|
52
|
+
<doc>Query terms as a phrase.</doc>
|
53
|
+
</option>
|
54
|
+
</param>
|
55
|
+
<param name="results" type="xsd:int" default="10">
|
56
|
+
<doc xml:lang="en" title="Number of results"/>
|
57
|
+
</param>
|
58
|
+
<param name="start" type="xsd:int" default="1">
|
59
|
+
<doc xml:lang="en" title="Index of first result"/>
|
60
|
+
</param>
|
61
|
+
<param name="sort" type="xsd:string" default="rank">
|
62
|
+
<doc xml:lang="en" title="Sort by date or rank"/>
|
63
|
+
<option value="rank"/>
|
64
|
+
<option value="date"/>
|
65
|
+
</param>
|
66
|
+
<param name="language" type="xsd:string">
|
67
|
+
<doc xml:lang="en" title="Language filter, omit for any language"/>
|
68
|
+
</param>
|
69
|
+
<param name="output" type="xsd:string" default="xml">
|
70
|
+
<doc>The format for the output. If <html:em>json</html:em> is requested, the results will be returned in <html:a href="http://developer.yahoo.com/common/json.html">JSON</html:a> format. If <html:em>php</html:em> is requested, the results will be returned in <html:a href="http://developer.yahoo.com/common/phpserial.html">Serialized PHP</html:a> format.</doc>
|
71
|
+
<option value="xml"/>
|
72
|
+
<option value="json"/>
|
73
|
+
<option value="php"/>
|
74
|
+
</param>
|
75
|
+
<param name="callback" type="xsd:string">
|
76
|
+
<doc>The name of the callback function to wrap around the JSON data. The following characters are allowed: A-Z a-z 0-9 . [] and _. If output=json has not been requested, this parameter has no effect. More information on the callback can be found in the <html:a href="http://developer.yahoo.com/common/json.html#callbackparam">Yahoo! Developer Network JSON Documentation</html:a>.</doc>
|
77
|
+
</param>
|
78
|
+
</request>
|
79
|
+
<response>
|
80
|
+
<representation mediaType="application/xml" element="yn:ResultSet">
|
81
|
+
<doc xml:lang="en" title="A list of news items matching the query"/>
|
82
|
+
</representation>
|
83
|
+
<fault id="SearchError" status="400" mediaType="application/xml"
|
84
|
+
element="ya:Error"/>
|
85
|
+
</response>
|
86
|
+
</method>
|
87
|
+
|
88
|
+
</application>
|
data/examples/crummy.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'wadl'
|
2
|
+
|
3
|
+
crummy = WADL::Application.from_wadl(open("crummy.wadl"))
|
4
|
+
add_resource = crummy.find_resource(:add)
|
5
|
+
|
6
|
+
repr_format = add_resource.find_method(:add).request.representations[0]
|
7
|
+
representation = repr_format % {:password => 'mypassword',
|
8
|
+
:entry => 'This is an entry',
|
9
|
+
:title => 'The title!' }
|
10
|
+
result = add_resource.post(:path => {:weblog => "personal"},
|
11
|
+
:send_representation => representation)
|
12
|
+
if format = result.format and format.id == 'CreatedAtURI'
|
13
|
+
puts "Success!"
|
14
|
+
puts result.headers['Location']
|
15
|
+
else
|
16
|
+
puts result
|
17
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
|
3
|
+
<!--Example of WADL being used to turn a not-particularly-RESTful CGI
|
4
|
+
application into a web service.-->
|
5
|
+
|
6
|
+
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
7
|
+
xsi:schemaLocation="http://research.sun.com/wadl wadl.xsd"
|
8
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
9
|
+
xmlns:nb="urn:newsbruiser:nb"
|
10
|
+
xmlns="http://research.sun.com/wadl">
|
11
|
+
|
12
|
+
<resources base="http://www.crummy.com/nb/nb.cgi/">
|
13
|
+
<resource path="add" id="add">
|
14
|
+
<param name="weblog" type="xsd:string" />
|
15
|
+
<method href="#add"/>
|
16
|
+
</resource>
|
17
|
+
</resources>
|
18
|
+
|
19
|
+
<method name="POST" id="add">
|
20
|
+
<request>
|
21
|
+
<representation mediaType="application/x-www-form-encoded">
|
22
|
+
<param name="password" type="xsd:string" required="true" />
|
23
|
+
<param name="entry" type="xsd:string" required="true" />
|
24
|
+
<param name="title" type="xsd:string" />
|
25
|
+
<param name="make_change" type="xsd:string" fixed="true" />
|
26
|
+
<param name="Button" type="xsd:string" fixed="Publish" />
|
27
|
+
</representation>
|
28
|
+
</request>
|
29
|
+
|
30
|
+
<response>
|
31
|
+
<fault id="CreatedAtURI" status="302" />
|
32
|
+
</response>
|
33
|
+
</method>
|
34
|
+
</application>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'wadl'
|
2
|
+
|
3
|
+
delicious = WADL::Application.from_wadl(open("delicious.wadl")).v1
|
4
|
+
delicious = delicious.with_basic_auth('username', 'password' )
|
5
|
+
|
6
|
+
query_args = { :url => 'https://wadl.dev.java.net/',
|
7
|
+
:description => 'WADL homepage',
|
8
|
+
:extended => 'Posted with Ruby WADL client' }
|
9
|
+
begin
|
10
|
+
delicious.posts.add.get(:query => query_args)
|
11
|
+
rescue WADL::Faults::AuthorizationRequired
|
12
|
+
puts "Invalid authentication information!"
|
13
|
+
end
|
14
|
+
|
15
|
+
#delicious.posts.add.addPost(:query => query_args)
|
16
|
+
#delicious.posts.addPost(:query => query_args)
|
17
|
+
|
18
|
+
begin
|
19
|
+
delicious.posts.recent.get.representation.each_element("post") do |e|
|
20
|
+
puts "#{e.attributes['description']}: #{e.attributes['href']}"
|
21
|
+
end
|
22
|
+
rescue WADL::Faults::AuthorizationRequired
|
23
|
+
puts "Invalid authentication information!"
|
24
|
+
end
|
@@ -0,0 +1,348 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<!-- This is a bootleg WADL file for the del.icio.us API. -->
|
3
|
+
|
4
|
+
<application xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
5
|
+
xmlns:html="http://www.w3.org/1999/xhtml"
|
6
|
+
xmlns="http://research.sun.com/wadl/2006/07">
|
7
|
+
|
8
|
+
<resources base="https://api.del.icio.us/">
|
9
|
+
<doc xml:lang="en" title="The del.icio.us API v1">
|
10
|
+
Post or retrieve your bookmarks from the social networking website.
|
11
|
+
Limit requests to one per second.
|
12
|
+
</doc>
|
13
|
+
|
14
|
+
<resource path="v1">
|
15
|
+
<param name="Authorization" style="header" required="true">
|
16
|
+
<doc xml:lang="en">All del.icio.us API calls must be authenticated
|
17
|
+
using Basic HTTP auth.</doc>
|
18
|
+
</param>
|
19
|
+
|
20
|
+
<resource path="update"><method href="#getLastUpdateTime" /></resource>
|
21
|
+
|
22
|
+
<resource path="tags">
|
23
|
+
<resource path="get"><method href="#getTags" /></resource>
|
24
|
+
<resource path="rename"><method href="#renameTag" /></resource>
|
25
|
+
</resource>
|
26
|
+
|
27
|
+
<resource path="posts">
|
28
|
+
<resource path="get"><method href="#getPosts" /></resource>
|
29
|
+
<resource path="recent"><method href="#getRecentPosts" /></resource>
|
30
|
+
<resource path="all"><method href="#getAllPosts" /></resource>
|
31
|
+
<resource path="dates"><method href="#getDates" /></resource>
|
32
|
+
|
33
|
+
<resource path="add"><method href="#addPost" /></resource>
|
34
|
+
<resource path="delete"><method href="#deletePost" /></resource>
|
35
|
+
</resource>
|
36
|
+
|
37
|
+
<resource path="bundles">
|
38
|
+
<resource path="all"><method href="#getBundles" /></resource>
|
39
|
+
<resource path="set"><method href="#makeBundle" /></resource>
|
40
|
+
<resource path="delete"><method href="#deleteBundle" /></resource>
|
41
|
+
</resource>
|
42
|
+
</resource>
|
43
|
+
</resources>
|
44
|
+
|
45
|
+
<!-- Methods -->
|
46
|
+
|
47
|
+
<!-- "update" method -->
|
48
|
+
|
49
|
+
<method id="getLastUpdateTime" name="GET">
|
50
|
+
<response>
|
51
|
+
<representation mediaType="application/xml" element="update">
|
52
|
+
<doc xml:lang="en" title="A note on structure">
|
53
|
+
The "time" attribute contains the last update time for the
|
54
|
+
authenticated user, in ISO8661 format.
|
55
|
+
</doc>
|
56
|
+
</representation>
|
57
|
+
<fault href="#AuthorizationRequired" />
|
58
|
+
</response>
|
59
|
+
</method>
|
60
|
+
|
61
|
+
<!-- "tags" methods -->
|
62
|
+
|
63
|
+
<method id="getTags" name="GET">
|
64
|
+
<response>
|
65
|
+
<representation mediaType="application/xml" element="tags">
|
66
|
+
<doc xml:lang="en" title="Schema description">
|
67
|
+
Contains "tag" tags, each with "count" and "tag" attributes.
|
68
|
+
</doc>
|
69
|
+
</representation>
|
70
|
+
<fault href="#AuthorizationRequired" />
|
71
|
+
</response>
|
72
|
+
</method>
|
73
|
+
|
74
|
+
<method id="renameTag" name="POST">
|
75
|
+
<request>
|
76
|
+
<param name="old" required="true" style="form">
|
77
|
+
<doc xml:lang="en" title="Tag to rename." />
|
78
|
+
</param>
|
79
|
+
<param name="new" required="true" style="form">
|
80
|
+
<doc xml:lang="en" title="New name." />
|
81
|
+
</param>
|
82
|
+
</request>
|
83
|
+
|
84
|
+
<response>
|
85
|
+
<representation href="#resultCodeDone" />
|
86
|
+
<fault href="#AuthorizationRequired" />
|
87
|
+
</response>
|
88
|
+
</method>
|
89
|
+
|
90
|
+
<!-- "posts" methods part I: ways of getting posts -->
|
91
|
+
|
92
|
+
<method id="getPosts" name="GET">
|
93
|
+
<doc xml:lang="en" title="Returns posts matching the arguments.">
|
94
|
+
If no date or url is given, most recent date will be used.
|
95
|
+
</doc>
|
96
|
+
|
97
|
+
<request>
|
98
|
+
<param name="tag" style="form">
|
99
|
+
<doc xml:lang="en" title="Filter by this tag." />
|
100
|
+
</param>
|
101
|
+
<param name="dt" style="form">
|
102
|
+
<doc xml:lang="en" title="Filter by this date (CCYY-MM-DDThh:mm:ssZ)." />
|
103
|
+
</param>
|
104
|
+
<param name="url" style="form">
|
105
|
+
<doc xml:lang="en" title="Filter by this URL." />
|
106
|
+
</param>
|
107
|
+
</request>
|
108
|
+
<response>
|
109
|
+
<representation mediaType="application/xml" element="posts">
|
110
|
+
<doc xml:lang="en" title="Sample response">
|
111
|
+
<posts dt="2005-11-28" tag="webdev" user="user">
|
112
|
+
<post href="http://www.howtocreate.co.uk/tutorials/texterise.php?dom=1"
|
113
|
+
description="JavaScript DOM reference"
|
114
|
+
extended="dom reference"
|
115
|
+
hash="c0238dc0c44f07daedd9a1fd9bbdeebd"
|
116
|
+
others="55" tag="dom javascript webdev" time="2005-11-28T05:26:09Z" />
|
117
|
+
</posts>
|
118
|
+
</doc>
|
119
|
+
</representation>
|
120
|
+
</response>
|
121
|
+
</method>
|
122
|
+
|
123
|
+
<method id="getRecentPosts" name="GET">
|
124
|
+
|
125
|
+
<doc xml:lang="en" title="Returns a list of the most recent posts.">
|
126
|
+
Filtered by argument. Maximum 100.
|
127
|
+
</doc>
|
128
|
+
|
129
|
+
<request>
|
130
|
+
<param name="tag" style="form">
|
131
|
+
<doc xml:lang="en" title="Filter by this tag." />
|
132
|
+
</param>
|
133
|
+
<param name="count" style="form" default="15">
|
134
|
+
<doc xml:lang="en" title="Number of items to retrieve.">Maximum: 100</doc>
|
135
|
+
</param>
|
136
|
+
</request>
|
137
|
+
|
138
|
+
<response>
|
139
|
+
<representation href="#postList" />
|
140
|
+
<fault href="#AuthorizationRequired" />
|
141
|
+
</response>
|
142
|
+
</method>
|
143
|
+
|
144
|
+
<method id="getAllPosts" name="GET">
|
145
|
+
<doc xml:lang="en" title="Returns all posts">
|
146
|
+
Please use sparingly. Call the update function to see if you need
|
147
|
+
to fetch this at all.
|
148
|
+
</doc>
|
149
|
+
|
150
|
+
<request>
|
151
|
+
<param name="tag" style="form">
|
152
|
+
<doc xml:lang="en" title="Filter by this tag." />
|
153
|
+
</param>
|
154
|
+
</request>
|
155
|
+
|
156
|
+
<response>
|
157
|
+
<representation href="#postList" />
|
158
|
+
<fault href="#AuthorizationRequired" />
|
159
|
+
</response>
|
160
|
+
</method>
|
161
|
+
|
162
|
+
<method id="getDates" name="GET">
|
163
|
+
<doc xml:lang="en"
|
164
|
+
title="Returns a list of dates with the number of posts at each date." />
|
165
|
+
|
166
|
+
<request>
|
167
|
+
<param name="tag" style="form">
|
168
|
+
<doc xml:lang="en" title="Filter by this tag." />
|
169
|
+
</param>
|
170
|
+
</request>
|
171
|
+
<response>
|
172
|
+
<representation mediaType="application/xml">
|
173
|
+
<doc xml:lang="en" title="Sample">
|
174
|
+
<dates tag="" user="user">
|
175
|
+
<date count="5" date="2005-11-29" />
|
176
|
+
<date count="15" date="2005-11-28" />
|
177
|
+
<date count="2" date="2005-11-26" />
|
178
|
+
<date count="2" date="2005-11-25" />
|
179
|
+
<date count="7" date="2005-11-23" />
|
180
|
+
<date count="20" date="2005-11-22" />
|
181
|
+
<date count="16" date="2005-11-21" />
|
182
|
+
<date count="4" date="2005-11-19" />
|
183
|
+
</dates>
|
184
|
+
</doc>
|
185
|
+
</representation>
|
186
|
+
</response>
|
187
|
+
</method>
|
188
|
+
|
189
|
+
<!-- "posts" methods part II: ways of manipulating posts -->
|
190
|
+
|
191
|
+
<method id="addPost" name="GET">
|
192
|
+
<doc xml:lang="en" title="Add a post to del.icio.us" />
|
193
|
+
<request>
|
194
|
+
<param name="url" required="true" style="form">
|
195
|
+
<doc xml:lang="en" title="The URL of the item." />
|
196
|
+
</param>
|
197
|
+
|
198
|
+
<param name="description" required="true" style="form">
|
199
|
+
<doc xml:lang="en" title="The description of the item." />
|
200
|
+
</param>
|
201
|
+
|
202
|
+
<param name="extended" style="form">
|
203
|
+
<doc xml:lang="en" title="Notes for the item." />
|
204
|
+
</param>
|
205
|
+
|
206
|
+
<param name="tags" style="form">
|
207
|
+
<doc xml:lang="en" title="Tags for the item.">Space delimited</doc>
|
208
|
+
</param>
|
209
|
+
|
210
|
+
<param name="dt" style="form">
|
211
|
+
<doc xml:lang="en" title="Datestamp of the item.">
|
212
|
+
Format: "CCYY-MM-DDThh:mm:ssZ". Requires a LITERAL "T" and "Z"
|
213
|
+
like in
|
214
|
+
<html:a href="http://www.cl.cam.ac.uk/~mgk25/iso-time.html">ISO8601</html:a>.
|
215
|
+
For example: "1984-09-01T14:21:31Z"
|
216
|
+
</doc>
|
217
|
+
</param>
|
218
|
+
|
219
|
+
<param name="replace" default="" style="form">
|
220
|
+
<doc xml:lang="en"
|
221
|
+
title="Unless set to "no", a post will overwrite an
|
222
|
+
earlier post with the same URL." />
|
223
|
+
<option value="" />
|
224
|
+
<option value="no" />
|
225
|
+
</param>
|
226
|
+
|
227
|
+
<param name="shared" style="form">
|
228
|
+
<doc xml:lang="en" title="Set to "no" to make the item private." />
|
229
|
+
<option value="" />
|
230
|
+
<option value="no" />
|
231
|
+
</param>
|
232
|
+
|
233
|
+
</request>
|
234
|
+
|
235
|
+
<response>
|
236
|
+
<representation href="#resultCode" />
|
237
|
+
<fault href="#AuthorizationRequired" />
|
238
|
+
</response>
|
239
|
+
</method>
|
240
|
+
|
241
|
+
<method id="deletePost" name="GET">
|
242
|
+
<doc xml:lang="en" title="Delete a post from del.icio.us" />
|
243
|
+
|
244
|
+
<request>
|
245
|
+
<param name="url" required="true" style="form">
|
246
|
+
<doc xml:lang="en" title="The URL of the item." />
|
247
|
+
</param>
|
248
|
+
</request>
|
249
|
+
|
250
|
+
<response>
|
251
|
+
<representation href="#resultCodeDone" />
|
252
|
+
<fault href="#AuthorizationRequired" />
|
253
|
+
</response>
|
254
|
+
</method>
|
255
|
+
|
256
|
+
<!-- "bundles" methods -->
|
257
|
+
|
258
|
+
<method id="getBundles" name="GET">
|
259
|
+
<doc xml:lang="en" title="Retrieve all of a user's bundles." />
|
260
|
+
|
261
|
+
<response>
|
262
|
+
<representation mediaType="application/xml" element="bundles">
|
263
|
+
<doc xml:lang="en" title="Sample">
|
264
|
+
<bundles>
|
265
|
+
<bundle name="music" tags="ipod mp3 music" />
|
266
|
+
</bundles>
|
267
|
+
</doc>
|
268
|
+
</representation>
|
269
|
+
<fault href="#AuthorizationRequired" />
|
270
|
+
</response>
|
271
|
+
</method>
|
272
|
+
|
273
|
+
<method id="makeBundle" name="GET">
|
274
|
+
<doc xml:lang="en" title="Assign a set of tags to a single bundle.">
|
275
|
+
Wipes away previous settings for bundle.
|
276
|
+
</doc>
|
277
|
+
|
278
|
+
<request>
|
279
|
+
<param name="bundle" style="form">
|
280
|
+
<doc xml:lang="en" title="The bundle name." />
|
281
|
+
</param>
|
282
|
+
<param name="tags" required="true" style="form">
|
283
|
+
<doc xml:lang="en" title="List of tags.">Space-separated.</doc>
|
284
|
+
</param>
|
285
|
+
</request>
|
286
|
+
|
287
|
+
<response>
|
288
|
+
<representation mediaType="application/xml" element="result">
|
289
|
+
<doc xml:lang="en" title="A note on structure">
|
290
|
+
On success, contents are "done" On failure,
|
291
|
+
contents are "you must supply a bundle name and at least one
|
292
|
+
tag"
|
293
|
+
</doc>
|
294
|
+
</representation>
|
295
|
+
<fault href="#AuthorizationRequired" />
|
296
|
+
</response>
|
297
|
+
</method>
|
298
|
+
|
299
|
+
<method id="deleteBundle" name="GET">
|
300
|
+
<doc xml:lang="en" title="Deletes a bundle." />
|
301
|
+
<request>
|
302
|
+
<param name="bundle" style="form">
|
303
|
+
<doc xml:lang="en" title="The bundle name." />
|
304
|
+
</param>
|
305
|
+
</request>
|
306
|
+
|
307
|
+
<response>
|
308
|
+
<representation href="#resultCodeDone" />
|
309
|
+
<fault href="#AuthorizationRequired" />
|
310
|
+
</response>
|
311
|
+
</method>
|
312
|
+
|
313
|
+
<!-- Commonly used representations -->
|
314
|
+
|
315
|
+
<representation id="postList" mediaType="text/xml" element="posts">
|
316
|
+
<doc xml:lang="en" title="Sample">
|
317
|
+
<posts tag="" user="user">
|
318
|
+
<post href="http://www.weather.com/" description="weather.com"
|
319
|
+
hash="6cfedbe75f413c56b6ce79e6fa102aba" tag="weather reference"
|
320
|
+
time="2005-11-29T20:30:47Z" />
|
321
|
+
<post href="http://www.nytimes.com/"
|
322
|
+
description="The New York Times - Breaking News, World News & Multimedia"
|
323
|
+
extended="requires login" hash="ca1e6357399774951eed4628d69eb84b"
|
324
|
+
tag="news media" time="2005-11-29T20:30:05Z" />
|
325
|
+
</posts>
|
326
|
+
</doc>
|
327
|
+
</representation>
|
328
|
+
|
329
|
+
<representation id="resultCode" mediaType="application/xml" element="result">
|
330
|
+
<doc xml:lang="en" title="A note on structure">
|
331
|
+
This representation has the same structure whether or not the
|
332
|
+
operation succeeded. If it succeeded, the value of the 'code'
|
333
|
+
attribute is "done". Otherwise, it's "something went wrong".
|
334
|
+
</doc>
|
335
|
+
</representation>
|
336
|
+
|
337
|
+
<representation id="resultCodeDone" mediaType="application/xml" element="result">
|
338
|
+
<doc xml:lang="en" title="A note on structure">
|
339
|
+
Allegedly, this representation has a "code" attribute whose value
|
340
|
+
is always "done". I think it might actually be the same as the
|
341
|
+
resultCode representation.
|
342
|
+
</doc>
|
343
|
+
</representation>
|
344
|
+
|
345
|
+
<fault id="AuthorizationRequired" status="401" />
|
346
|
+
|
347
|
+
|
348
|
+
</application>
|
data/examples/yahoo.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'wadl'
|
2
|
+
|
3
|
+
yahoo = WADL::Application.from_wadl(open("yahoo.wadl"))
|
4
|
+
search_resource = yahoo.find_resource(:newsSearch)
|
5
|
+
expected_representation = search_resource.find_method(:search).response.representations[0]
|
6
|
+
result = search_resource.get({:appid => "selectric", :query => "bar"},
|
7
|
+
expected_representation)
|
8
|
+
puts result.representation
|
9
|
+
|
10
|
+
begin
|
11
|
+
search_resource.get(:query => "bar")
|
12
|
+
rescue ArgumentError
|
13
|
+
puts "Couldn't call method without providing value for required variable. (Good)"
|
14
|
+
end
|
data/examples/yahoo.wadl
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
3
|
+
xsi:schemaLocation="http://research.sun.com/wadl wadl.xsd"
|
4
|
+
xmlns:tns="urn:yahoo:yn"
|
5
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
6
|
+
xmlns:yn="urn:yahoo:yn"
|
7
|
+
xmlns:ya="urn:yahoo:api"
|
8
|
+
xmlns="http://research.sun.com/wadl">
|
9
|
+
<grammars>
|
10
|
+
<include href="NewsSearchResponse.xsd"/>
|
11
|
+
<include href="http://api.search.yahoo.com/Api/V1/error.xsd"/>
|
12
|
+
</grammars>
|
13
|
+
|
14
|
+
<resources base="http://api.search.yahoo.com/NewsSearchService/V1/">
|
15
|
+
<resource uri="newsSearch">
|
16
|
+
<method href="#search"/>
|
17
|
+
</resource>
|
18
|
+
</resources>
|
19
|
+
|
20
|
+
<method name="GET" id="search">
|
21
|
+
<request>
|
22
|
+
<query.variable name="appid" type="xsd:string" required="true"/>
|
23
|
+
<query.variable name="query" type="xsd:string" required="true"/>
|
24
|
+
<query.variable name="type" type="xsd:string"/>
|
25
|
+
<query.variable name="results" type="xsd:int"/>
|
26
|
+
<query.variable name="start" type="xsd:int"/>
|
27
|
+
<query.variable name="sort" type="xsd:string"/>
|
28
|
+
<query.variable name="language" type="xsd:string"/>
|
29
|
+
</request>
|
30
|
+
|
31
|
+
<response>
|
32
|
+
<representation mediaType="application/xml" element="yn:ResultSet"/>
|
33
|
+
<fault id="SearchError" status="400" mediaType="text/xml"
|
34
|
+
element="ya:Error"/>
|
35
|
+
</response>
|
36
|
+
</method>
|
37
|
+
</application>
|