Я пытаюсь отправить JSON после использования этого запроса: http://localhost:8080/json_test?id=1 Это мой код до сих пор:Ответ с JSON на запрос HTTP
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/http_parameters)).
:- http_handler('/json_test', json_test, []).
nomeEdificio(1, "Torre dos Clérigos").
nomeEdificio(2, "Fonte dos Leões").
anoConstrucao(1, 1754).
anoConstrucao(2, 1882).
anoInauguracao(1, 1763).
anoInauguracao(2, 1884).
server(Port) :-
http_server(http_dispatch, [port(Port)]).
json_test(Request) :-
http_parameters(Request,
[ id(Id, [])]
),
compute_request(Id,PrologOut),
prolog_to_json(PrologOut,JSonOut),
reply_json(JSonOut).
compute_request(Id,PrologOut):-
nomeEdificio(Id,N), anoConstrucao(Id,Ac), anoInauguracao(Id,Ai), % Some consulting operations
PrologOut = json([ name=N,
dates=json([yearConstruction=Ac, yearInauguration=Ai])
]).
Но я получаю эту ошибку:
"Internal server error
goal unexpectedly failed: user:json_test([protocol(http),peer(ip(127,0,0,1)),pool(client('[email protected]',user:http_dispatch,<stream>(00000000056CE8C0),<stream>(00000000056CCD90))),input(<stream>(00000000056CE8C0)),method(get),request_uri('/json_test?id=1'),path('/json_test'),search([id='1']),http_version(1-1),host(localhost),port(8080),user_agent('Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'),accept([media(text/html,[],1.0,[]),media(application/'xhtml+xml',[],1.0,[]),media(application/xml,[],0.9,[]),media(_G3007/_G3008,[],0.8,[])]),accept_language('en-US,en;q=0.5'),accept_encoding('gzip, deflate'),connection('keep-alive'),upgrade_insecure_requests('1')])"
Я не могу понять, что не так, документации о том, как использовать эти предикаты Пролога, мало. Любая помощь приветствуется, спасибо.
Прочитайте документацию ['http_parameters/2'] (http://eu.swi-prolog.org/pldoc/doc_for?object=http_parameters/2) для преобразования типов, а также проверьте **' attribute_declarations/1' ** вариант ['http_parameters/3'] (http://eu.swi-prolog.org/pldoc/doc_for?object=http_parameters/3) для преобразования' ID' в ** целое число **, так что вы можете запросить с ней свою базу данных. – mat
Спасибо! Я не знал о разных типах. Он работает с параметрами http_parameters (Request, [id (Id, [integer])]). – TiagoS