Internet DRAFT - draft-fiorelli-weirds-rws
draft-fiorelli-weirds-rws
Network Working Group B. Fiorelli
Internet-Draft RIPE
Intended status: Informational June 9, 2011
Expires: December 11, 2011
The RIPE Database REST API
draft-fiorelli-weirds-rws-00
Abstract
This document describes the RIPE Database REST API.
The purpose of this document is to facilitate discussion and serve as
input into a standards process in this area, currently being
discussed on the WHOIS-based Extensible Internet Registration Data
Service (WEIRDS) mailing list
(https://www.ietf.org/mailman/listinfo/weirds).
Status of this Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on December 11, 2011.
Copyright Notice
Copyright (c) 2011 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
Fiorelli Expires December 11, 2011 [Page 1]
Internet-Draft RIPE-RWS June 2011
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Why REST? . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Some features of the Query Services . . . . . . . . . . . . . . 5
3. Some sample invocation of the query services . . . . . . . . . 6
4. Some details on the CRUD Services . . . . . . . . . . . . . . . 6
5. Internationalization Considerations . . . . . . . . . . . . . . 7
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 7
7. Security Considerations . . . . . . . . . . . . . . . . . . . . 8
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 8
8.1. Normative References . . . . . . . . . . . . . . . . . . . 8
8.2. Informative References . . . . . . . . . . . . . . . . . . 8
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 8
Fiorelli Expires December 11, 2011 [Page 2]
Internet-Draft RIPE-RWS June 2011
1. Introduction
This document describes a pilot service for querying and displaying
data in the RIPE database. The service is implemented using the HTTP
protocol [RFC2616] and conforms to the architectural constraints of
REST [REST]. In this document, we explain our reasons for new
interfaces (and limits of existing ones) as well as high level
functionalities of the API. We did not include technical details of
our implementation, which can be found as a separate document and is
available at:
http://labs.ripe.net/Members/bfiorell/api-documentation.
1.1. Why REST?
The RIPE Database has a large number of power users: organisations
and individuals that make or maintain software which depends on the
RIPE Database. The way these specialized clients interact with the
RIPE Database is dictated by historical and technical aspects of RPSL
and the Whois protocol.
RPSL ([RFC2622]) is the routing policy specification language, but
for historical and convenience reasons it actually specifies much
more than routing policies, there are many RFCs related to the RPSL
(see [RFC2622], [RFC2650], [RFC4012]) and in practice the language
describes more than 20 different types of RPSL objects, it is more a
formalisation of the way policy records have been stored and
exchanged in the existing Whois systems since to the late 80's
instead of a high level domain language specification.
The result is that the policy specification language and its
extensions are tightly coupled with the way policies are stored in
the existing Whois systems and vice versa, so any new system that is
implementing the language ends up reproducing a Whois system.
The qualities of RPSL and Whois are well known. In this section we
highlight their limits by describing the way a client would interact
with the two Whois interfaces of query and update.
First scenario, a client needs to extract sensible information from
one or more Internet Registries like the RIPE Database, the steps
are:
prepare one or more queries and invoke a command line Whois client
program or open a TCP socket connection to one or more Whois
servers,
parse and post-process the RPSL responses, facing many intricacies
like continuation lines, end of line comments, comma separated
Fiorelli Expires December 11, 2011 [Page 3]
Internet-Draft RIPE-RWS June 2011
values, attribute values that can reference to different types of
RPSL objects depending on various conditions, etc.,
if object references need to be resolved, extract referenced
primary keys, execute other queries, parse again RPSL to identify
the right referenced objects; this step can be recursive,
merge results from multiple queries, maybe queries from multiple
internet registries that may adopt different RPSL flavours,
extract subsets of objects, by applying various criteria,
extract subsets of attributes from set of objects, by applying
various criteria.
The other standard scenarios is that of update:
in case of update or delete, fetch the object, this operation may
require several of the steps described in the previous workflow,
in case of a new object, build RPSL text, maybe starting
converting business data into RPSL text,
decorate the object with authorisation credentials, adding
password hashes to the RPSL text or signing the RPSL text with a
PGP key,
send the text data via mail to the Mail Update interface or via
HTTP post to the Syncupdates interface,
in case of error, parse a human readable text response if specific
error conditions must be handled in a special way.
As shown above, such processes are modeled on a human centered
workflow, they are not the optimal to build new services, extend
existing ones or build tools on top of them.
Concretely, this means clients have to handle too much complexity,
many clients have problems at handling all the complexity of RPSL,
many are too expensive to be extended and difficult to maintain.
RPSL and Whois are still invaluable but it's evident that there is a
need for simpler interfaces and machine ready data formats in order
to simplify the development of services and tools and increase the
value of Registries by exposing new domain specific interfaces.
The first step can be the identification of a layer of Service
Provider Interfaces and a data schema simple enough to be agnostic of
Fiorelli Expires December 11, 2011 [Page 4]
Internet-Draft RIPE-RWS June 2011
the underlying Registry implementation.
The SPI would sit on top of a Registry Database allowing the
composition of domain specific Services but also making real-time
interoperation between Registries and services on multiple
authoritative Databases possible to achieve.
With these forces and this vision the RIPE Database Group has been
prototyping the RIPE Whois RESTful Query and CRUD API and the related
XML schemas.
The choice of REST has been quite obvious, HTTP is nowadays the most
accessible protocol and it represents a good architectural blueprint
for stateless services, with its different HTTP methods, the resource
locator protocol, the HTTPS, etc.
For the representation schema we have designed a very relaxed
attribute oriented XML Schema. We only apply a structural validation
via XSD, after some testing we decided to remove any form of
attribute or type validation in order to reuse the same schema on
different RPSL flavors.
The services support representational styles JSON, HTML and plain
text, all derived via XSL transformation, with the latter two to
showcase the transformation powers of XML and also to demo resource
navigation via lookup references on any HTML browser.
Content negotiation can be done using HTTP headers or appending a
file extension to the request URL.
The query services can be used on any RPSL based Whois server or
mirror.
For example in one request it is possible to execute the same Lookup
or Search request on all the Regional Internet Registries and return
all the responses as a unique set of resources.
Similarly can be done for the CRUD interfaces, building adapter
modules for the different update mechanisms provided by different
Registries given that they adopt the same set of resource types.
Actually we implemented an adapter for the Whois Syncupdates
interface in the form of an HTTP proxy.
2. Some features of the Query Services
Fiorelli Expires December 11, 2011 [Page 5]
Internet-Draft RIPE-RWS June 2011
Single resource Lookup Service, given a primary key a type and a
registry it always return one and only one object. It can also be
used to identify resources by URL bookmark.
Resolution of referenced resources. Given a resource, all the
attribute values that represent references to other resource
contain an xlink anchor that can be followed to navigate and
browse networks of resources.
HATEOAS, the client can navigate through any network of resources
via xlinks without requiring any stateful information to be stored
on the servers, this comes as a benefit of the two previous
features.
Normalisation of comma separated values, when they represent
references to multiple resources.
Normalisation of continuation lines, end of line comments and
other RPSL intricacies. This is still a work in progress and
still not complete because is difficult to test all the side
effects of this operation. The only real solution would be to
deprecate continuation lines in RPSL and split them into multiple
attribute value pairs.
All the Query Services are available also on HTTPS.
3. Some sample invocation of the query services
A Lookup Service URL for an organization object:
http://apps.db.ripe.net/whois/lookup/ripe/organisation/ORG-BME1-RIPE
A Lookup Service URL for a route object:
http://apps.db.ripe.net/whois/lookup/ripe/route/193.6.23.0/24/AS2547
A Search Service URL on multiple registries: http://apps.db.ripe.net/
whois/
search.xml?flags=r&source=ripe&source=apnic&source=afrinic&
query-string=AS2547
4. Some details on the CRUD Services
The CRUD Services are an attempt to split the single overloaded
generic update interface provided by Mail Updates and Syncupdates
into separate low level interfaces, each defining a simpler contract,
designed for programmatic use rather than for human interaction.
Fiorelli Expires December 11, 2011 [Page 6]
Internet-Draft RIPE-RWS June 2011
For example the existing update interfaces always require clients to
provide the entire RPSL resource in exactly the same text-format as
it is stored in the Whois database, even if the requested operation
is just a deletion. A client will have to fetch the RPSL object from
the RIPE Database doing an appropriate query, than extract ony the
text blob that represent the resource to be deleted and finally it
will have to execute a request to the update service providing the
entire text and adding delete attributes and authorisation
credentials.
The new CRUD Services on the other hand provide a Delete interface
that only requires a primary key, a type, a registry identifier and
one or more passwords. It is the equivalent of a lookup but is
executed with the HTTP Delete method. It is exposed only on HTTPS.
The client will just have to send a request like: HTTP DELETE: https:
//lab.db.ripe.net/whois/delete/test/person/pp16-test?password=123 :
The server will just respond with an HTTP Status code indicating
success or failure, in case of failure different status codes will
indicate different error conditions.
On top of Create, Update and Delete methods we also prototyped some
attribute modification services that in one only request can
implement complex update workflow.
For example with one only HTTP request will be possible to execute
commands like:
replace all the attributes of a given type with a new set of
attribute,
remove all the attributes that have value matching the given
regular expression,
add a new set of attributes after the Nth attribute of type X.
5. Internationalization Considerations
TBA
6. IANA Considerations
TBA
Fiorelli Expires December 11, 2011 [Page 7]
Internet-Draft RIPE-RWS June 2011
7. Security Considerations
TBA.
8. References
8.1. Normative References
[REST] Fielding, R. and R. Taylor, "Principled Design of the
Modern Web Architecture", ACM Transactions on Internet
Technology Vol. 2, No. 2, May 2002.
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, January 2005.
[RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource
Identifiers (IRIs)", RFC 3987, January 2005.
8.2. Informative References
[RFC2622] Alaettinoglu, C., Villamizar, C., Gerich, E., Kessens, D.,
Meyer, D., Bates, T., Karrenberg, D., and M. Terpstra,
"Routing Policy Specification Language (RPSL)", RFC 2622,
June 1999.
[RFC2650] Meyer, D., Schmitz, J., Orange, C., Prior, M., and C.
Alaettinoglu, "Using RPSL in Practice", RFC 2650,
August 1999.
[RFC3707] Newton, A., "Cross Registry Internet Service Protocol
(CRISP) Requirements", RFC 3707, February 2004.
[RFC3912] Daigle, L., "WHOIS Protocol Specification", RFC 3912,
September 2004.
[RFC4012] Blunk, L., Damas, J., Parent, F., and A. Robachevsky,
"Routing Policy Specification Language next generation
(RPSLng)", RFC 4012, March 2005.
Fiorelli Expires December 11, 2011 [Page 8]
Internet-Draft RIPE-RWS June 2011
Author's Address
Benedetto Fiorelli
RIPE NCC
P.O. Box 10096
Amsterdam 1001EB
The Netherlands
Phone: +31.20.535.4444
Email: bfiorell@ripe.net
Fiorelli Expires December 11, 2011 [Page 9]