Jump to content
Elfocrash

L2jRest - An L2j Rest API

Recommended Posts

L2jRest is a RESTful API for L2j

It is created for latest aCis but you should be able to adapt it is you wanna use it for other projects.

L2jRest is an open source project licensed under MIT. You can find the source here: https://github.com/Elfocrash/L2jRest

Why use it?

  • You can use the data of your server in your website
  • You can create an account control panel with it
  • You can expose data to your community to allow them to make third party apps

Technical stuff

  • It is written in Kotlin.
  • It is using the Ktor framework. Ktor is using coroutines to achieve asynchronous request handling. It is very efficient and very fast.
  • It is using Netty as the underlying server.
  • It is written in a CQRS manner with query handlers for get endpoints and command handlers for post, put, patch, delete etc.
  • It is using Koin as the IoC framework.

How to setup

  • Download and install Intellij IDEA
  • Git clone the project and open it with Intellij
  • Run the build Gradle task. It is configured to create a fat jar with all the dependencies included
  • Paste the jar in your project, add it in your classpath and add the following line at the bottom of your Gameserver.java: L2jRestApi.INSTANCE.start();
  • Running the gameserver will also run the api. It is running under port 6969

How to extend it

  • All you need to do if you wanna add more endpoints is to add a new handler and then add the Get, Post etc annotation depending on what endpoint you want this to be.

 

Current endpoints:

http://localhost:6969/api/players
http://localhost:6969/api/players
/{id}

A couple of endpoint examples

Endpoints: http://localhost:6969/api/players

Response:

{
    players: [
		{
			"id": 268480927,
            "name": "Test",
            "level": 1,
            "isOnline": false,
            "pvpKills": 0,
            "pkKills": 0,
            "isNobless": false
		},
		{
			"id": 268480924,
            "name": "Test2",
            "level": 1,
            "isOnline": true,
            "pvpKills": 0,
            "pkKills": 0,
            "isNobless": false
		}
	]
}

 

Endpoint: http://localhost:6969/api/players/268480927

Response:

{
    "id": 268480927,
    "name": "Test",
    "level": 1,
    "isOnline": false,
    "pvpKills": 0,
    "pkKills": 0,
    "isNobless": false
}

 

Currently it just supports two endpoints and no authentication. I am planning to add more endpoints and ApiKey based auth tomorrow.

If you can't be arsed to build the project yourself but you wanna take a look anyway you can download the jar here

Edited by Elfocrash
  • Like 4
  • I love it 1

Share this post


Link to post
Share on other sites
8 minutos atrás, Elfocrash disse:

I don't know whats nWatch. Can you give me an example?

https://www.l2sublimity.com/forum/view/7952-nostalgia-first-nwatch-concept/

You are able to see status/equipment/etc of any player. Just putting the nickname.

Sry for not having an online example.

Edited by PeNaChO

NHEpml4.png

Share this post


Link to post
Share on other sites

Thanks guys.

Changed the way handlers are registered. Now they will be scanned automatically during server startup and they will be registered based on their annotation. This means that all you have to do to add a new endpoint is to create a request handler and add the Get, Post etc annotation.

  • I love it 1

Share this post


Link to post
Share on other sites

Nice work!

 

I never read nothing about this language, I need to look at it for sure!

If it was to PHP I have a perfect library to implement cross  revision support https://github.com/L2jBrasil/L2JPHP (not mature yet but could be with some help)

?

 


EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Share this post


Link to post
Share on other sites
16 hours ago, Grundor said:

I never read nothing about this language, I need to look at it for sure!

If it was to PHP I have a perfect library to implement cross  revision support https://github.com/L2jBrasil/L2JPHP (not mature yet but could be with some help)

?

 

It's very good. It's like a way better java (combines C#, Scala and Java) and it has proper async support with coroutines. This API is insanely fast.

I've seen the l2jphp. It is quite different since L2jRest runs from within the server to provide real time metrics. L2jphp goes straight to the database right?

Update

  • Added api key based authentication as requested. Requests will only be served when the x-api-key header is set with the configured value.
  • Like 2

Share this post


Link to post
Share on other sites
18 minutos atrás, Elfocrash disse:

It's very good. It's like a way better java (combines C#, Scala and Java) and it has proper async support with coroutines. This API is insanely fast.

I've seen the l2jphp. It is quite different since L2jRest runs from within the server to provide real time metrics. L2jphp goes straight to the database right?

Update

  • Added api key based authentication as requested. Requests will only be served when the x-api-key header is set with the configured value.

Yes, its most to the php+mysql envs such remote websites and something like that.

 

For sure an internal API running among the server will be insanely fast, a build-in server with an HTTP API would be very nice for development. 


EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...



     



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Você reportar esses links no botão denúncia, que iremos lá e veremos o que está offline e movemos para a área de conteúdo offline!  Pensando bem, eu estou elaborando um plano interno para checar todos os tópicos em downloads e mover o que acharmos offline, é trabalhoso pq são milhares de tópicos, mas logo logo coloco em prática!  Infelizmente esse modelo não tem como ferramenta do ipb para cadastrar, eu faria o mesmo em recrutamento. Uma espécie de questionário, pedindo para o usuário informar sua revisão, modelo e tudo mais, porém o ipb não dispõe de uma ferramenta assim.  Quando o usuário clica em dúvidas, ele dá de cara com isso: Acho evasivo esse aviso, mas é necessário e muitos se baseiam nele para fazer suas perguntas.    Quais outras sugestões, bro? Tem algumas aqui no tópico que colocamos em prática já, outras infelizmente são inviáveis como esse questionário que o ipb não dispõe de algo assim!
    • Vou te dar um exemplo da sugestão que eu fiz, eu poderia citar outra porém eu não quero por o nome de ninguém no meio, minha sugestão foi padronizar a área de dúvidas, para que se torne uma regra, assim dando mais clareza em suas dúvidas e principalmente , agilizando o entendimento e interpretação do que foi solicitado. Após dar uma olhada apenas na primeira página, você pode notar que existem tópicos como          Eu poderia citar outros tópicos mas não há necessidade, enfim, a questão é que a área de dúvidas tem tópicos aos quais falta muitas informações e isso começa aquele famoso : Qual pack está usando ? É interlude  freya high five ? é Classic ? Qual java ela usa ? Entre outras coisas. Perguntas bobas aos quais poderiam ser evitadas simplesmente se houvesse padronização de publicações. Poderiam por exemplo, quando um membro clicar na área de dúvidas, ao invés dele ir pra área de dúvidas diretamente, ele iria para um tópico de um administrador explicando detalhadamente como postar para ter um melhor atendimento e mais rápido de preferência.   Eu não estou falando que tem que ser do jeito do Elesis, e sim que, isso era algo que agregaria sim ao fórum, assim como outras sugestões aqui, que ainda estou esperando serem aplicadas. Está é a minha opinião, mas não leve isso como uma verdade propriamente dita, é apenas a forma que eu penso e eu como lido com fórum também, afinal de contas também temos uma grande comunidade no nosso e com essa padronização melhorou muito em múltiplos aspectos  ❤️   Forte abraço e boa sorte com as sugestões. 
    • Olá, boa tarde! Os tópicos com links offline movemos para uma área especial para esperar por uma recuperação.  Quanto aos códigos incompletos, temos mods na área de estão sempre checando algo e tentando verificar se está nos conformes. As vezes é complicado ter tudo 100%, mas nos esforçamos para isso! 
    • tinha que te uma opção para deletar tópicos com links off e códigos incompletos, como tem muitos por ai, porque tem membros que faz tópicos só pra te reputação.
    • Welll, well, well... Diga, algum exemplo ai brother... Todos aqui são avaliados, quando tem como fazer, colocamos em prática como é o caso de algumas ideias já sugeridas, e se não condiz com a realidade infelizmente não temos como colocar em prática, mas tentamos ao máximo suprimir essas possibilidades!  
    • Já foram feitas muitas sugestões boas que ajudariam a manter a organização do fórum de uma maneira positiva, creio que antes de sugerir mais coisas, vocês devem aplicar o bom conteúdo assim apresentado pela comunidade. 
    • UP! Galera, boa tarde! Qualquer sugestão que vocÊs tenham para o fórum, favor sugeri aqui nessa área. Estarei lendo tudo e levando a Administração para verificar é viável.     Grato, 
    • Acis link off-line . link principal funciona bem, obrigado por compartilhar
    • Seu projeto e muito bom, mais pra  melhorar mais vcs podia muda esse modo de assinar updates vip. A pessoa doa pra pegar a ultima atualização, depois fica 3 mêses coçando sem atualização nova, eu mesmo não peguei esses novos updates porisso. Alias nem sei se eu peguei, ou não ate uma assinatura de updates, não consigo baixa nada mais la, só as do começo kkkk. Podia ser um modo de você ter direito de pegar um total x de proximas atualizações, ai até dava animo.  
×
×
  • Create New...