Uit Hack42
Ga naar: navigatie, zoeken
Regel 19: Regel 19:
 
Ik heb veel goede en minder goede dingen gehoord over Rust, maar het is bijzonder snel met memory safety. Dus klinkt het als een goede volgende stap naast C.
 
Ik heb veel goede en minder goede dingen gehoord over Rust, maar het is bijzonder snel met memory safety. Dus klinkt het als een goede volgende stap naast C.
 
Als requirements voor de API heb ik leesbaarheid hoog staan, en heb geen zin om zelf documentatie te schrijven.
 
Als requirements voor de API heb ik leesbaarheid hoog staan, en heb geen zin om zelf documentatie te schrijven.
 +
 +
 +
# Project doel
 +
 +
Ik zit al een tijdje met het idee om een service te maken zoals [https://ipchicken.com/ '''IP Chicken'''] (een service om je externe ip terug te krijgen).
 +
Dit lijkt me leuk en handig om zo iets te hebben :shrug:.
 +
 +
Mn idee is om de nieuwe API achter een nginx instance te hangen en met 'proxy_pass X-Real-IP' het caller IP door te geven aan de service.
 +
Dit zal vast makkelijker kunnen, of zelfs in nginx, maar ik wil rust leren en heb een hopelijk eenvoudig project nodig.
  
  
Regel 25: Regel 34:
 
Ik ben niet van plan om zelf een framework te maken, of met sockets te werken. Dus ik heb een framework nodig die veel voor me doet, maar niet te veel.
 
Ik ben niet van plan om zelf een framework te maken, of met sockets te werken. Dus ik heb een framework nodig die veel voor me doet, maar niet te veel.
  
Tijdens het zoeken ben ik iemand tegen gekomen met een [https://dylananthony.com/blog/fastapi-rust-1-intro/ '''blog die ongeveer het zelfde doet als dat ik zou willen'''].
+
Tijdens het zoeken ben ik iemand tegen gekomen met [https://dylananthony.com/blog/fastapi-rust-1-intro/ '''een blog'''] die ongeveer het zelfde doet als dat ik zou willen.
 
Deze blog serie vergelijkt meerdere API frameworks, die hostbaar zijn en documentatie genereren.
 
Deze blog serie vergelijkt meerdere API frameworks, die hostbaar zijn en documentatie genereren.
Spoiler! de blog serie komt uit op [https://rocket.rs/ '''het Rocket framework'''].
+
Spoiler alert! de blog serie komt uit op [https://rocket.rs/ '''het Rocket framework'''].
 +
 
 +
 
 +
# Doen wat de blog doet
 +
 
 +
De blog is uitgekomen op Rocket, met best goede vergelijkingen en onderbouwingen.
 +
Ik heb er meerdere dagen ingestoken om een goed werkende API te krijgen.
 +
Ik was behoorlijk stuk aan het gaan over hoe ik documentatie bij een endpoint krijg, en kreeg het maar niet op redelijke manier voor elkaar :/.
 +
 
 +
 
 +
# Space kennis
 +
 
 +
Ik heb een rondvraag gedaan binnen spacechat of er iemand bezig is of ervaring heeft met rust. En YES, iemand is met rust mensen aan het werken!
 +
Van die deelnemer heb ik het [https://github.com/kiesraad/abacus '''Abacus project'''] van de nederlandse kiesraad door gekregen, DIT WAS HEEL ERG FIJN!!!!!!1!!
 +
 
 +
Ik ben naar de backend gegaan, en zag binnen de sources 'authentication' staan, en daarna een [https://github.com/kiesraad/abacus/blob/main/backend/src/authentication/api.rs '''api.rs''', daar moet wel wat bruikbaars in zitten.
 +
 
 +
Er is een functie 'whoami', en deze zag er best leesbaar uit:
 +
<nowiki>
 +
#[utoipa::path(
 +
  get,
 +
  path = "/api/user/whoami",
 +
  responses(
 +
      (status = 200, description = "The current user name and id", body = LoginResponse),
 +
      (status = 401, description = "Invalid user session", body = ErrorResponse),
 +
      (status = 500, description = "Internal server error", body = ErrorResponse),
 +
  ),
 +
)]
 +
async fn whoami(user: Option<User>) -> Result<impl IntoResponse, APIError> {
 +
    let user = user.ok_or(AuthenticationError::UserNotFound)?;
 +
 
 +
    Ok(Json(LoginResponse::from(&user)))
 +
}
 +
</nowiki>
 +
 
 +
Mischien nog wel leesbaarder dan een vergelijkbare API in FastAPI.... (en IMO betere defenities van responses).
 +
 
 +
 
 +
# Doen wat de kiesraad soet

Versie van 18 mei 2025 20:31

Project: Eerste rust API
Schroefje24.png
Schroefje24.png
Schroefje24.png
Schroefje24.png
Eerste rust API Picture.jpg

Eerste rust API

Naam Eerste rust API
Door Squirl
Status Afgerond
Madskillz Rust, systemd
Doel / Omschrijving
Process om een API framework te kiezen in rust
Alle Projecten - Project Toevoegen
File:Eerste rust API_Picture.jpg noez


Documentatie is in progress.


  1. Doel

Voor dat ik begin met dit project gebruikte ik veel FastAPI, wat geschreven is in python. Werkt best goed, maar wat wel vaker is in python, het schaalt niet echt lekker, en de verdere problemen bij python. Wat FastAPI wel heel erg goed doet is documentatie maken (en type checking van input en outputs met pydantic), en je krijgt toegang tot alle libraries.

Ik heb veel goede en minder goede dingen gehoord over Rust, maar het is bijzonder snel met memory safety. Dus klinkt het als een goede volgende stap naast C. Als requirements voor de API heb ik leesbaarheid hoog staan, en heb geen zin om zelf documentatie te schrijven.


  1. Project doel

Ik zit al een tijdje met het idee om een service te maken zoals IP Chicken (een service om je externe ip terug te krijgen). Dit lijkt me leuk en handig om zo iets te hebben :shrug:.

Mn idee is om de nieuwe API achter een nginx instance te hangen en met 'proxy_pass X-Real-IP' het caller IP door te geven aan de service. Dit zal vast makkelijker kunnen, of zelfs in nginx, maar ik wil rust leren en heb een hopelijk eenvoudig project nodig.


  1. Framework zoektocht

Ik ben niet van plan om zelf een framework te maken, of met sockets te werken. Dus ik heb een framework nodig die veel voor me doet, maar niet te veel.

Tijdens het zoeken ben ik iemand tegen gekomen met een blog die ongeveer het zelfde doet als dat ik zou willen. Deze blog serie vergelijkt meerdere API frameworks, die hostbaar zijn en documentatie genereren. Spoiler alert! de blog serie komt uit op het Rocket framework.


  1. Doen wat de blog doet

De blog is uitgekomen op Rocket, met best goede vergelijkingen en onderbouwingen. Ik heb er meerdere dagen ingestoken om een goed werkende API te krijgen. Ik was behoorlijk stuk aan het gaan over hoe ik documentatie bij een endpoint krijg, en kreeg het maar niet op redelijke manier voor elkaar :/.


  1. Space kennis

Ik heb een rondvraag gedaan binnen spacechat of er iemand bezig is of ervaring heeft met rust. En YES, iemand is met rust mensen aan het werken! Van die deelnemer heb ik het Abacus project van de nederlandse kiesraad door gekregen, DIT WAS HEEL ERG FIJN!!!!!!1!!

Ik ben naar de backend gegaan, en zag binnen de sources 'authentication' staan, en daarna een [https://github.com/kiesraad/abacus/blob/main/backend/src/authentication/api.rs api.rs, daar moet wel wat bruikbaars in zitten.

Er is een functie 'whoami', en deze zag er best leesbaar uit:

#[utoipa::path(
  get,
  path = "/api/user/whoami",
  responses(
      (status = 200, description = "The current user name and id", body = LoginResponse),
      (status = 401, description = "Invalid user session", body = ErrorResponse),
      (status = 500, description = "Internal server error", body = ErrorResponse),
  ),
)]
async fn whoami(user: Option<User>) -> Result<impl IntoResponse, APIError> {
    let user = user.ok_or(AuthenticationError::UserNotFound)?;

    Ok(Json(LoginResponse::from(&user)))
}

Mischien nog wel leesbaarder dan een vergelijkbare API in FastAPI.... (en IMO betere defenities van responses).


  1. Doen wat de kiesraad soet