Como uma pequena digressão para os não iniciados na programação lógica
neste texto, 
uma sessão mágica será 
realizada com a abordagem dada 
pela exposiçãopara criar um servidor REST e seus parâmetros são medidos.
Qual é o problema? E tudo é simples - faremos isso no Prolog (na implementação do SWI-prolog) ...
Então o que você precisa. Primeiro, faça o download (se ainda não o tiver feito) e coloque o swi-prólogo real
do site 
www.swi-prolog.org . É mais fácil criar um pequeno arquivo do tipo rest.pl com o conteúdo inicial do tipo
servidor
continue fazendo o download e edite-o usando o próprio sistema de prólogo, como este
(exemplos são dados para o console linux, mas não muito diferente do windows):
$echo "." > rest.pl $swipl ... ?- [rest]. true. ?- edit(). 
Depois disso, um editor semelhante ao emacs será iniciado e você poderá digitar tudo nele.
Então, no começo, indicaremos que usaremos bibliotecas e escreveremos o que isso significa
inicialização do servidor - nos caracteres de prólogo: - pode ser lido como "this is":
 :- use_module(library(http/http_server)). :- use_module(library(http/http_json)). :- http_handler(/,(M), [method(M),methods([get,post]),time_limit(10000)]).  :- http_server(http_dispatch, [port(8080)]). 
Como você pode ver, planejamos que o serviço responda aos métodos get e post.
Problema no modelo
Agora, na verdade, o que faremos. Mediante solicitação, responderemos com uma página com um campo de entrada de número; ao inseri-la, solicitaremos o método de postagem e calcularemos esse número de Fibonacci.
Isto é:
 (get,_) :- (X),(X). (post,) :- http_parameters(,[val(,[integer])]), (). 
Bem, é isso! Já escrevemos nosso servidor ... O prólogo é uma linguagem declarativa - por isso declaramos as opções de processamento. A propósito, qualquer idioma pode ser usado - eu decidi escrever em alguns lugares em russo.
Mas ei, o que ele está fazendo? Afinal, a “forma”, a “resposta” e a “redução” são nossos predicados e ainda não estão definidos. Vamos consertar:
 ():- format('Content-type: text/html~n~n <html><body>  <br/> ~w </body></html>~n', []). ('<form method="POST"><input name="val"/></form>'). 
Bem, aqui estão duas opções para o cálculo - vamos ter apenas números positivos de Fibonacci:
 ():-  > 0, (0,1,1,,),(X), format(atom(),'~w    ~w<br/>~w',[,,X]), (). ():- (X), format(atom(),'  ~w  0<br/>~w',[,X]), (). 
Bem, resta determinar realmente qual é o número de Fibonacci:
 (_F, F1, N, N, F1) :- !. (F0, F1, I, N, F) :- F2 is F0+F1, I2 is I + 1, !,(F1, F2, I2, N, F). 
Essa definição, 
é claro, não 
é muito familiar 
no Feng Shui , mas é considerada quase mais rápida do que se escrevêssemos em C ...
Então isso vai funcionar? Verificamos:
  ?- . % Started server at http://localhost:8080/ true. 
Portanto, o servidor parece ter iniciado. A propósito, é multithread! Para verificar, você precisa abrir o endereço
127.0.0.1 : 8080 / e digite algum número - por exemplo, 1000:
Cálculo dos números de Fibonacci
1000 o número de Fibonacci é igual a
4346655768693745643568852767504062580
2564660517371780402481729089536555417
9490518904038798400792551692959225930
8032263477520968962323987332247116164
2996440906533187938298969649928516003
704476137795166849228875
Bem, funciona!
Um pequeno estudo de desempenho do servidor - vamos verificar o método GET (o POST obviamente depende fortemente de um determinado número, portanto, um número de 10.000.000 é considerado, é claro, mas alguns segundos ...)
  $ ab -k -c 4 -n 4000 http://127.0.0.1:8080/ ... Concurrency Level: 4 Time taken for tests: 0.283 seconds Complete requests: 4000 Failed requests: 0 Keep-Alive requests: 4000 Total transferred: 1108000 bytes HTML transferred: 544000 bytes Requests per second: 14140.57 [ 
O que 14140 solicita por segundo com 10 threads - isso é muito bom para um computador comum!
E sim, o prólogo tem essa oportunidade - uma aparência lógica. Então, se você alterar algo no código, basta digitar o console
  ?- make. 
E todas as suas alterações funcionarão em novas solicitações - nada precisa ser sobrecarregado, parado, etc.
Espero que você esteja interessado em ver como criar um servidor de descanso com um exemplo tão simples. Obviamente, você pode descrever a interface restante estaticamente, como foi feito no exemplo, você pode inserir todos os tipos de variáveis, usar parte do caminho da URL como variáveis - bem, em geral, tudo é como sempre.
Você pode fazer isso dinamicamente, alterar a lógica do programa criando, excluindo e modificando predicados - uma espécie de servidor auto-modificável, cujo trabalho depende do histórico. Você pode conectar bancos de dados. Em geral, tudo é como sempre, apenas trabalhar é simples e agradável.