JSON-RPC significa JSON Remote Procedure Call. É uma arquitetura (semelhante à maneira como o REST é uma arquitetura), mas com a unidade fundamental sendo uma chamada de procedimento que um ponto de extremidade da API no caso do REST.
Aqui está uma carga útil simples para JSON-RPC:
// Requestcurl -X POST —data '{ "jsonrpc": "2.0", "method": "runThisFunction", "params": [ "some-param", 2 ], "id": 1}'// Response{ "jsonrpc": "2.0", "result": "codedamn", "id": 1}
Veja, neste exemplo, estamos enviando uma carga codificada em JSON seguindo a especificação RPC. Se o servidor estiver configurado para manipular JSON-RPC corretamente, ele deverá executar o método runThisFunction
com os parâmetros passados e retorne o resultado no formulário conforme mostrado.
O LSP usa JSON-RPC para se comunicar com o servidor remoto. Segue o seguinte:
Content-Length: rnrn
Para escrever um exemplo, será assim:
Content-Length: 78{"jsonrpc":"2.0","method":"runThisFunction","params":["some-param",2],"id":1}
O LSP exige que você passe o Content-Length
cabeçalho seguido por 2 CRLF
fichas rn
. Quando os servidores de idiomas em execução, como ccls
receber isso, eles responderão com uma mensagem apropriada:
Obviamente, no exemplo acima, você pode ver que ccls
diz que não há método chamado runThisFunction
, mas você pode ver que o servidor remoto também responde com um Content-Length
cabeçalho com uma especificação JSON-RPC.
Com a introdução de um protocolo formal LSP – Microsoft reduziu o famoso M x N
problema para M + N
problema.
M = Linguagens diferentes (C, C ++, PHP, Python, Nó, Swift, Go, etc.)
N = Diferentes editores (VSCode, Eclipse, Notepad ++, Sublime Text, etc.)
Anteriormente, para editores M oferecerem suporte a idiomas N, você precisa de soluções M * N, ou seja, todo editor precisava implementar o suporte nativo para todos os idiomas de maneira diferente.
Com a introdução do LSP, o editor só precisa implementar suporte para o seguinte Language Server Protocol. Uma vez feito isso, qualquer um que cria um servidor de idiomas (seguindo os padrões LSP) pode ser perfeitamente integrado ao editor, sem que o editor “saiba” de maneira inteligente com que idioma está trabalhando!
À medida que mais e mais idiomas são lançados em seus servidores de idiomas – as pessoas têm mais opções de escolha de editores de sua escolha. Você não precisa mais usar apenas o XCode for Swift development ou o PyCharm for Python. Não apenas isso, mas os LSPs também podem ser implementados diretamente no JavaScript para oferecer suporte ao IntelliSense nos navegadores, como estou fazendo em codedamn – uma plataforma para os desenvolvedores aprenderem e crescerem! É um momento emocionante para estar vivo!
Paz
Mehul