The Mission Control Simulation API is a fun practice API designed for students and developers learning how to work with APIs. It provides a set of endpoints for simulation of exploring space missions, agencies, spacecraft, and crews.
Instead of using the same old boring APIs, this project gives you something cool and space-themed to experiment with while learning concepts like HTTP requests, JSON parsing, and data modeling.
https://missioncontrol-e832.onrender.com/scalar/v1
https://missioncontrol-e832.onrender.com/api/v2/Missions
https://missioncontrol-e832.onrender.com/api/v1/Missions
This example shows the easiest way to call the Mission Control API and display data with no additional validation.
usingSystem;usingSystem.Net.Http.Json;usingSystem.Text.Json;namespaceTEST{classProgram{publicstaticasyncTaskMain(string[]args){Console.WriteLine(DateTime.Today.ToString("D"));//Base URLstringurl="https://missioncontrol-e832.onrender.com/api/v2/Missions";// Base URL with filters(***Currently only filter by 'name' & 'agency')stringurlFilter="https://missioncontrol-e832.onrender.com/api/v2/Missions?filterOn=agency&filterQuery=nasa";// Init HTTP client to send and receive web requestsHttpClientclient=newHttpClient();// Deserialize JSON into a list of MissionMain objectsvarmission=awaitclient.GetFromJsonAsync<List<Mission>>(urlFilter);// loop through each recordforeach(variteminmission){Console.WriteLine($"{item.missionId} - {item.name} - {item.agency}");}}//Class Structure for jsonpublicclassMission{publicGuidmissionId{get;set;}publicstringname{get;set;}publicstringagency{get;set;}publicDateTimelaunchDate{get;set;}}}}This version follows best practices—checking the response status code, using try/catch, and deserializing with defined JSON options for more reliable error handling and improved clarity.
usingSystem;usingSystem.Collections;usingSystem.Text.Json;namespaceAPI{classProgram{publicstaticasyncTaskMain(string[]args){Console.WriteLine(DateTime.Today.ToString("D"));Console.WriteLine($"\nMission Simulation Control API\n");stringurl="https://missioncontrol-e832.onrender.com/api/v1/Missions";// Init HTTP client to send and receive web requestsHttpClientclient=newHttpClient();// Set JSON options to ignore class name sensitivityvaroptions=newJsonSerializerOptions(){PropertyNameCaseInsensitive=true};try{// Send GET request to the APIvarresponse=awaitclient.GetAsync(url);// Check if the response was successful: status code 200if(response.IsSuccessStatusCode){// Grabs the raw JSON from the response bodyvarjson=awaitresponse.Content.ReadAsStringAsync();// Deserialize JSON into a list of MissionMain objectsvarmissionJson=JsonSerializer.Deserialize<List<MissionMain>>(json);Console.WriteLine($"{"ID(GUID)",-42}{"MissionName",-42}{"Agency",-25} ");Console.WriteLine(newstring('*',100));// Loop through each mission and print its details in formatted columnsforeach(variteminmissionJson){Console.WriteLine($"{item.missionId,-42}{item.name,-42}{item.agency,-25}");}}}catch(Exceptionex){Console.WriteLine($"Error message: {ex.Message}");throw;}}//FULL Class Structure for json for both v1 and v2 mission api endpointspublicclassCrew{publicstringcrewId{get;set;}publicstringastronautName{get;set;}publicstringnationality{get;set;}}publicclassMissionType{publicstringmissionTypeId{get;set;}publicstringname{get;set;}}publicclassMissionMain{publicstringmissionId{get;set;}publicstringname{get;set;}publicstringagency{get;set;}publicDateTimelaunchDate{get;set;}publicStatusstatus{get;set;}publicMissionTypemissionType{get;set;}publicSpacecraftspacecraft{get;set;}publicCrewcrew{get;set;}}publicclassSpacecraft{publicstringspacecraftId{get;set;}publicstringname{get;set;}publicstringtype{get;set;}publicstringmanufacturer{get;set;}}publicclassStatus{publicstringstatusId{get;set;}publicstringname{get;set;}}}}