<div dir="auto">The most probable problem is the OpenAPI spec is wrong, and then the plugin API is skipped altogether. <div dir="auto"><br></div><div dir="auto">If possible, share the openapi.json file in your plugin</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El lun., 20 de mayo de 2019 08:18, Stephen Graham <<a href="mailto:s.graham4@herts.ac.uk">s.graham4@herts.ac.uk</a>> escribió:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-GB" link="#0563C1" vlink="#954F72">
<div class="m_2023387582939662024WordSection1">
<p class="MsoNormal">Hi all – I know it’s Kohacon this week so a lot of people will be busy there, but just in case ……… (also sorry for the length of the email!):<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I testing creating a custom API endpoint using the Koha plugin system. I’ve been using the code in the Kitchen sink plugin as a template, and it seems to be working well apart from my lack of Swagger/OpenAPI knowledge – I think it’s this
 I struggling with. I have three files:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">koha-dev/var/lib/plugins/Koha/Plugin/Uk/Ac/Herts/Notifications.pm
<u></u><u></u></p>
<p class="MsoNormal">koha-dev/var/lib/plugins/Koha/Plugin/Uk/Ac/Herts/Notifications/NotificationController.pm<u></u><u></u></p>
<p class="MsoNormal">koha-dev/var/lib/plugins/Koha/Plugin/Uk/Ac/Herts/Notifications/openapi.json<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">The work is done in NotificationController.pm where I have a DBI call to get the following fields:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Borrower.userid<u></u><u></u></p>
<p class="MsoNormal">Message_queue.message_id<u></u><u></u></p>
<p class="MsoNormal">Message_queue.subject<u></u><u></u></p>
<p class="MsoNormal">Message_queue.content<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I fetch the data, and convert into JSON (encode_json is a method from Mojo::JSON) like:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">my $data = $sth->fetchall_arrayref({}); # return both fieldnames and values<u></u><u></u></p>
<p class="MsoNormal">my $json = encode_json($data);<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">if I then do (i.e. use text):<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">return $c->render( status => 200, text => $json)<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">it works fine. If I call <a href="https://herttest-staff.koha-ptfs.co.uk/api/v1/contrib/UH/notifications" target="_blank" rel="noreferrer">
https://herttest-staff.koha-ptfs.co.uk/api/v1/contrib/UH/notifications</a> I get json like:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">[ {<u></u><u></u></p>
<p class="MsoNormal">               “body”: “blah blah”,<u></u><u></u></p>
<p class="MsoNormal">               “messageid”: “1234567”,<u></u><u></u></p>
<p class="MsoNormal">               “subject”: “Important…”,<u></u><u></u></p>
<p class="MsoNormal">               “userid”:  99999999”<u></u><u></u></p>
<p class="MsoNormal">} {<u></u><u></u></p>
<p class="MsoNormal">               Etc etc<u></u><u></u></p>
<p class="MsoNormal">}]<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">So in Perl terms it’s an array of hashes. Which is what I want. However, if I try and use the openapi way that all the current “official” Koha endpoints use e.g.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">return $c->render( status => 200, openapi => { notices => $json } );
<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">it just doesn’t work. I have tried to map the field names with the appropriate types in openapi.json. I’ve tried object type with properties e.g.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">"responses": {<u></u><u></u></p>
<p class="MsoNormal">        "200": {<u></u><u></u></p>
<p class="MsoNormal">          "description": "A list of pending notices",<u></u><u></u></p>
<p class="MsoNormal">          "schema": {<u></u><u></u></p>
<p class="MsoNormal">                "type": "object",<u></u><u></u></p>
<p class="MsoNormal">                "properties": {<u></u><u></u></p>
<p class="MsoNormal">                "userid": {<u></u><u></u></p>
<p class="MsoNormal">                        "type": "string",<u></u><u></u></p>
<p class="MsoNormal">                        "description": "Unique User ID"<u></u><u></u></p>
<p class="MsoNormal">                }, etc<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">, and I’ve tried array type with items:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">"responses": {<u></u><u></u></p>
<p class="MsoNormal">        "200": {<u></u><u></u></p>
<p class="MsoNormal">          "description": "A list of pending notices",<u></u><u></u></p>
<p class="MsoNormal">          "schema": {<u></u><u></u></p>
<p class="MsoNormal">                "type": "array",<u></u><u></u></p>
<p class="MsoNormal">                "items": {<u></u><u></u></p>
<p class="MsoNormal">                "userid": {<u></u><u></u></p>
<p class="MsoNormal">                        "type": "string",<u></u><u></u></p>
<p class="MsoNormal">                        "description": "Unique User ID"<u></u><u></u></p>
<p class="MsoNormal">                }, etc<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">But I get a page not found error. When I pass my $json variable to the render method using openapi how do I get it to work? I’m happy to use the text way, but I want to understand where I’m going wrong. Any ideas, hints, tips would be most
 welcome!<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Cheers, Stephen<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span>--------------------------------------<u></u><u></u></span></p>
<p class="MsoNormal"><span>Stephen Graham<u></u><u></u></span></p>
<p class="MsoNormal"><span>Library Technology Consultant<u></u><u></u></span></p>
<p class="MsoNormal"><span>Content and Collections Team<u></u><u></u></span></p>
<p class="MsoNormal"><span>Library and Computing Services<u></u><u></u></span></p>
<p class="MsoNormal"><span>University of Hertfordshire<u></u><u></u></span></p>
<p class="MsoNormal"><span>Tel: 01707 286111<u></u><u></u></span></p>
<p class="MsoNormal"><span>Ext: 77751<u></u><u></u></span></p>
<p class="MsoNormal"><span>Email: <a href="mailto:s.graham4@herts.ac.uk" target="_blank" rel="noreferrer">
<span style="color:#0563c1">s.graham4@herts.ac.uk</span></a><u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

_______________________________________________<br>
Koha-devel mailing list<br>
<a href="mailto:Koha-devel@lists.koha-community.org" target="_blank" rel="noreferrer">Koha-devel@lists.koha-community.org</a><br>
<a href="http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel" rel="noreferrer noreferrer" target="_blank">http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel</a><br>
website : <a href="http://www.koha-community.org/" rel="noreferrer noreferrer" target="_blank">http://www.koha-community.org/</a><br>
git : <a href="http://git.koha-community.org/" rel="noreferrer noreferrer" target="_blank">http://git.koha-community.org/</a><br>
bugs : <a href="http://bugs.koha-community.org/" rel="noreferrer noreferrer" target="_blank">http://bugs.koha-community.org/</a></blockquote></div>