Koha/api/v1/swagger.json
Julian Maurice c83cd77411 Bug 13799: RESTful API with Mojolicious and Swagger2
Actual routes are:
  /borrowers
    Return a list of all borrowers in Koha

  /borrowers/{borrowernumber}
    Return the borrower identified by {borrowernumber}
    (eg. /borrowers/1)

There is a test file you can run with:
  $ prove t/db_dependent/rest/borrowers.t

All API stuff is in /api/v1 (except Perl modules)
So we have:
  /api/v1/script.cgi     CGI script
  /api/v1/swagger.json   Swagger specification

Change both OPAC and Intranet VirtualHosts to access the API,
so we have:
  http://OPAC/api/v1/swagger.json   Swagger specification
  http://OPAC/api/v1/{path}         API endpoint
  http://INTRANET/api/v1/swagger.json   Swagger specification
  http://INTRANET/api/v1/{path}         API endpoint

Add a (disabled) virtual host in Apache configuration api.HOSTNAME,
so we have:
  http://api.HOSTNAME/api/v1/swagger.json   Swagger specification
  http://api.HOSTNAME/api/v1/{path}         API endpoint

Add 'unblessed' subroutines to both Koha::Objects and Koha::Object to be
able to pass it to Mojolicious

Test plan:
  1/ Install Perl modules Mojolicious and Swagger2
  2/ perl Makefile.PL
  3/ make && make install
  4/ Change etc/koha-httpd.conf and copy it to the right place if needed
  5/ Reload Apache
  6/ Check that http://(OPAC|INTRANET)/api/v1/borrowers and
     http://(OPAC|INTRANET)/api/v1/borrowers/{borrowernumber} works

Optionally, you could verify that http://(OPAC|INTRANET)/vX/borrowers
(where X is an integer greater than 1) returns a 404 error

Signed-off-by: Alex Arnaud <alex.arnaud@biblibre.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2015-11-04 13:47:32 -03:00

108 lines
2.4 KiB
JSON

{
"swagger": "2.0",
"info": {
"title": "Koha REST API",
"version": "1",
"license": {
"name": "GPL v3",
"url": "http://www.gnu.org/licenses/gpl.txt"
},
"contact": {
"name": "Koha Team",
"url": "http://koha-community.org/"
}
},
"basePath": "/api/v1",
"paths": {
"/borrowers": {
"get": {
"x-mojo-controller": "Koha::REST::V1::Borrowers",
"operationId": "listBorrowers",
"tags": ["borrowers"],
"produces": [
"application/json"
],
"responses": {
"200": {
"description": "A list of borrowers",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/borrower"
}
}
}
}
}
},
"/borrowers/{borrowernumber}": {
"get": {
"x-mojo-controller": "Koha::REST::V1::Borrowers",
"operationId": "getBorrower",
"tags": ["borrowers"],
"parameters": [
{
"$ref": "#/parameters/borrowernumberPathParam"
}
],
"produces": [
"application/json"
],
"responses": {
"200": {
"description": "A borrower",
"schema": {
"$ref": "#/definitions/borrower"
}
},
"404": {
"description": "Borrower not found",
"schema": {
"$ref": "#/definitions/error"
}
}
}
}
}
},
"definitions": {
"borrower": {
"type": "object",
"properties": {
"borrowernumber": {
"$ref": "#/definitions/borrowernumber"
},
"cardnumber": {
"description": "library assigned ID number for borrowers"
},
"surname": {
"description": "borrower's last name"
},
"firstname": {
"description": "borrower's first name"
}
}
},
"borrowernumber": {
"description": "Borrower internal identifier"
},
"error": {
"type": "object",
"properties": {
"error": {
"description": "Error message",
"type": "string"
}
}
}
},
"parameters": {
"borrowernumberPathParam": {
"name": "borrowernumber",
"in": "path",
"description": "Internal borrower identifier",
"required": "true",
"type": "integer"
}
}
}