Prompt Title: C# API for managing appointments

Created 1 year ago
Votes 0
Views 193 times
0
Human: Create a REST API in C# to manage appointment
ChatGPT:

Sure, I can help you with that. Here's an example of how to create a REST API in C# to manage appointments:

First, you need to create a new ASP.NET Web API project in Visual Studio. Open Visual Studio and select "File" -> "New" -> "Project". Then, select "ASP.NET Web Application" and name your project "AppointmentManagerAPI". Select "API" as the project template and click "Create".

Next, create a new class called "Appointment" in the Models folder. This class will represent an appointment:

csharp
public class Appointment { public int Id { get; set; } public string Title { get; set; } public DateTime StartDateTime { get; set; } public DateTime EndDateTime { get; set; } }

Next, create a new controller called "AppointmentsController" in the Controllers folder. This controller will handle all the CRUD (Create, Read, Update, Delete) operations for appointments:

csharp
[Route("api/[controller]")] [ApiController] public class AppointmentsController : ControllerBase { private readonly List<Appointment> _appointments; public AppointmentsController() { _appointments = new List<Appointment> { new Appointment { Id = 1, Title = "Meeting with John", StartDateTime = new DateTime(2023, 4, 22, 10, 0, 0), EndDateTime = new DateTime(2023, 4, 22, 11, 0, 0) }, new Appointment { Id = 2, Title = "Lunch with Jane", StartDateTime = new DateTime(2023, 4, 22, 12, 0, 0), EndDateTime = new DateTime(2023, 4, 22, 13, 0, 0) } }; } // GET api/appointments [HttpGet] public IActionResult Get() { return Ok(_appointments); } // GET api/appointments/5 [HttpGet("{id}")] public IActionResult Get(int id) { var appointment = _appointments.FirstOrDefault(a => a.Id == id); if (appointment == null) { return NotFound(); } return Ok(appointment); } // POST api/appointments [HttpPost] public IActionResult Post([FromBody] Appointment appointment) { appointment.Id = _appointments.Count + 1; _appointments.Add(appointment); return CreatedAtAction(nameof(Get), new { id = appointment.Id }, appointment); } // PUT api/appointments/5 [HttpPut("{id}")] public IActionResult Put(int id, [FromBody] Appointment appointment) { var existingAppointment = _appointments.FirstOrDefault(a => a.Id == id); if (existingAppointment == null) { return NotFound(); } existingAppointment.Title = appointment.Title; existingAppointment.StartDateTime = appointment.StartDateTime; existingAppointment.EndDateTime = appointment.EndDateTime; return NoContent(); } // DELETE api/appointments/5 [HttpDelete("{id}")] public IActionResult Delete(int id) { var appointment = _appointments.FirstOrDefault(a => a.Id == id); if (appointment == null) { return NotFound(); } _appointments.Remove(appointment); return NoContent(); } }

This controller contains five action methods:

  • Get: returns a list of all appointments.
  • Get(id): returns an appointment with the specified ID.
  • Post: creates a new appointment.
  • Put(id): updates an existing appointment with the specified ID.
Human: can you add a domain layer and repository with entity framework that works with sql server
ChatGPT:

Sure, I can help you with that. Here's an updated example of how to create a REST API in C# to manage appointments with a domain layer and repository using Entity Framework that works with SQL Server:

First, create a new class library called "AppointmentManager.Domain" in your solution. This project will contain the domain layer classes and interfaces:

csharp
namespace AppointmentManager.Domain.Models { public class Appointment { public int Id { get; set; } public string Title { get; set; } public DateTime StartDateTime { get; set; } public DateTime EndDateTime { get; set; } } }
csharp
namespace AppointmentManager.Domain.Interfaces { public interface IAppointmentRepository { IEnumerable<Appointment> GetAll(); Appointment GetById(int id); void Add(Appointment appointment); void Update(Appointment appointment); void Delete(int id); } }

Next, create a new class library called "AppointmentManager.Infrastructure" in your solution. This project will contain the repository implementation using Entity Framework:

csharp
using AppointmentManager.Domain.Interfaces; using AppointmentManager.Domain.Models; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; namespace AppointmentManager.Infrastructure.Repositories { public class AppointmentRepository : IAppointmentRepository { private readonly AppointmentDbContext _context; public AppointmentRepository(AppointmentDbContext context) { _context = context; } public IEnumerable<Appointment> GetAll() { return _context.Appointments.ToList(); } public Appointment GetById(int id) { return _context.Appointments.Find(id); } public void Add(Appointment appointment) { _context.Appointments.Add(appointment); _context.SaveChanges(); } public void Update(Appointment appointment) { _context.Entry(appointment).State = EntityState.Modified; _context.SaveChanges(); } public void Delete(int id) { var appointment = _context.Appointments.Find(id); _context.Appointments.Remove(appointment); _context.SaveChanges(); } } }

Next, add a new class called "AppointmentDbContext" in the same project. This class will define the Entity Framework DbContext:

arduino
using AppointmentManager.Domain.Models; using Microsoft.EntityFrameworkCore; namespace AppointmentManager.Infrastructure { public class AppointmentDbContext : DbContext { public AppointmentDbContext(DbContextOptions<AppointmentDbContext> options) : base(options) { } public DbSet<Appointment> Appointments { get; set; } } }

Next, add a reference to the "AppointmentManager.Domain" and "AppointmentManager.Infrastructure" projects in the "AppointmentManagerAPI" project. Then, update the "Startup.cs" file to register the DbContext and repository with dependency injection:

arduino
using AppointmentManager.Domain.Interfaces; using AppointmentManager.Infrastructure; using AppointmentManager.Infrastructure.Repositories; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace AppointmentManagerAPI { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDbContext<AppointmentDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddScoped<IAppointmentRepository, AppointmentRepository>(); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } }
Human: can you and swagger to the services
ChatGPT:

Yes, I can help you add Swagger to the AppointmentManagerAPI project. Swagger is a useful tool that generates documentation and a user interface for your RESTful API.

To add Swagger to the project, first, you'll need to install the Swashbuckle.AspNetCore NuGet package. You can do this by opening the Package Manager Console and running the following command:

mathematica
Install-Package Swashbuckle.AspNetCore

Next, open the Startup.cs file and add the following code to the ConfigureServices method:

arduino
using Microsoft.OpenApi.Models; // ... public void ConfigureServices(IServiceCollection services) { // ... services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Appointment Manager API", Version = "v1" }); }); }

This code configures Swagger and sets the title and version of your API. You can customize these values to suit your needs.

Next, add the following code to the Configure method in Startup.cs:

typescript
app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Appointment Manager API v1"); c.RoutePrefix = string.Empty; });

This code sets up the Swagger user interface and configures the endpoint where the Swagger JSON is located.

With these changes, you should be able to see the Swagger user interface by navigating to the URL http://localhost:<port>/swagger/index.html, where <port> is the port number of your application.

Note that Swagger will automatically generate documentation and a user interface for any endpoints that are decorated with the [HttpGet], [HttpPost], [HttpPut], [HttpDelete], or [HttpPatch] attributes. If you want to customize the documentation or provide additional information, you can use the [SwaggerOperation] and related attributes to add metadata to your endpoints.

Human: can you add an entity named Patient to the domain and all layers
ChatGPT:

Sure, I can help you add a Patient entity to the domain layer and all other layers of the AppointmentManagerAPI.

First, let's add the Patient entity to the domain layer. Open the AppointmentManager.Core project and create a new folder named Entities. Inside this folder, create a new class named Patient with the following properties:

csharp
using System; namespace AppointmentManager.Core.Entities { public class Patient { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime DateOfBirth { get; set; } public string PhoneNumber { get; set; } } }

Now, let's add the Patient entity to the data layer using Entity Framework. Open the AppointmentManager.Infrastructure project and create a new folder named Data. Inside this folder, create a new class named AppointmentManagerDbContext that inherits from DbContext. Then, add the Patient entity to the AppointmentManagerDbContext class as a DbSet:

csharp
using AppointmentManager.Core.Entities; using Microsoft.EntityFrameworkCore; namespace AppointmentManager.Infrastructure.Data { public class AppointmentManagerDbContext : DbContext { public AppointmentManagerDbContext(DbContextOptions<AppointmentManagerDbContext> options) : base(options) { } public DbSet<Patient> Patients { get; set; } } }

Next, let's create a repository for the Patient entity. Open the AppointmentManager.Core project and create a new folder named Repositories. Inside this folder, create a new interface named IPatientRepository with the following methods:

csharp
using System.Collections.Generic; using System.Threading.Tasks; using AppointmentManager.Core.Entities; namespace AppointmentManager.Core.Repositories { public interface IPatientRepository { Task<IEnumerable<Patient>> GetAllPatients(); Task<Patient> GetPatientById(int id); Task AddPatient(Patient patient); Task UpdatePatient(Patient patient); Task DeletePatient(Patient patient); } }

Then, create a new class named PatientRepository that implements the IPatientRepository interface:

csharp
using System.Collections.Generic; using System.Threading.Tasks; using AppointmentManager.Core.Entities; using AppointmentManager.Core.Repositories; using Microsoft.EntityFrameworkCore; namespace AppointmentManager.Infrastructure.Data.Repositories { public class PatientRepository : IPatientRepository { private readonly AppointmentManagerDbContext _dbContext; public PatientRepository(AppointmentManagerDbContext dbContext) { _dbContext = dbContext; } public async Task<IEnumerable<Patient>> GetAllPatients() { return await _dbContext.Patients.ToListAsync(); } public async Task<Patient> GetPatientById(int id) { return await _dbContext.Patients.FindAsync(id); } public async Task AddPatient(Patient patient) { await _dbContext.Patients.AddAsync(patient); await _dbContext.SaveChangesAsync(); } public async Task UpdatePatient(Patient patient) { _dbContext.Entry(patient).State = EntityState.Modified; await _dbContext.SaveChangesAsync(); } public async Task DeletePatient(Patient patient) { _dbContext.Patients.Remove(patient); await _dbContext.SaveChangesAsync(); } } }

Finally, let's create a controller for the Patient entity. Open the AppointmentManager.API project and create a new folder named Controllers. Inside this folder, create a new class named PatientsController with the following code:

csharp
using System.Collections.Generic; using System.Threading.Tasks; using AppointmentManager.Core.Entities; using AppointmentManager.Core.Repositories; using Microsoft.AspNetCore.Mvc
Human: can you add the patient entity to the Appointment model
ChatGPT:

Sure, I can help you add the Patient entity to the Appointment model.

Open the AppointmentManager.Core project and open the Appointment.cs file. Add a new property to the Appointment class of type Patient:

csharp
using System; namespace AppointmentManager.Core.Entities { public class Appointment { public int Id { get; set; } public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } public string Location { get; set; } public int PatientId { get; set; } // added property public Patient Patient { get; set; } // added property } }

This adds a new property named Patient of type Patient to the Appointment class.

Next, open the AppointmentManager.Infrastructure project and open the AppointmentManagerDbContext.cs file. In the OnModelCreating method, add the following code to configure the relationship between Appointment and Patient:

csharp
modelBuilder.Entity<Appointment>() .HasOne(a => a.Patient) .WithMany() .HasForeignKey(a => a.PatientId);

This code configures a one-to-many relationship between Appointment and Patient where an Appointment can have one Patient, but a Patient can have many Appointments.

Finally, open the AppointmentDto.cs file in the AppointmentManager.API project and add a new property to the AppointmentDto class:

csharp
using System; namespace AppointmentManager.API.Models { public class AppointmentDto { public int Id { get; set; } public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } public string Location { get; set; } public int PatientId { get; set; } // added property public PatientDto Patient { get; set; } // added property } }

This adds a new property named Patient of type PatientDto to the AppointmentDto class.

Note that you also need to create the PatientDto class in the AppointmentManager.API.Models namespace, similar to how you created the AppointmentDto class. The PatientDto class should contain properties that correspond to the Patient entity properties.

Human: please add an application service layer with dto's for all models and add mapping for them
ChatGPT:

Sure, I can help you add an application service layer with DTOs and mapping for all models.

First, let's create the DTO classes for the Appointment and Patient entities. In the AppointmentManager.Application project, create a new folder named Dto and add two classes named AppointmentDto.cs and PatientDto.cs. The code for these classes should look like this:

csharp
namespace AppointmentManager.Application.Dto { public class AppointmentDto { public int Id { get; set; } public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } public string Location { get; set; } public int PatientId { get; set; } public PatientDto Patient { get; set; } } public class PatientDto { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public string Phone { get; set; } } }

Now let's add the application service layer. In the AppointmentManager.Application project, create a new folder named Services. In this folder, add two classes named AppointmentService.cs and PatientService.cs.

The code for AppointmentService.cs should look like this:

csharp
using AppointmentManager.Application.Dto; using AppointmentManager.Core.Entities; using AppointmentManager.Core.Interfaces; using AutoMapper; using System.Collections.Generic; using System.Threading.Tasks; namespace AppointmentManager.Application.Services { public class AppointmentService : IAppointmentService { private readonly IAppointmentRepository _repository; private readonly IMapper _mapper; public AppointmentService(IAppointmentRepository repository, IMapper mapper) { _repository = repository; _mapper = mapper; } public async Task<List<AppointmentDto>> GetAllAppointmentsAsync() { var appointments = await _repository.GetAllAsync(); return _mapper.Map<List<AppointmentDto>>(appointments); } public async Task<AppointmentDto> GetAppointmentByIdAsync(int id) { var appointment = await _repository.GetByIdAsync(id); return _mapper.Map<AppointmentDto>(appointment); } public async Task<AppointmentDto> CreateAppointmentAsync(AppointmentDto appointmentDto) { var appointment = _mapper.Map<Appointment>(appointmentDto); var createdAppointment = await _repository.AddAsync(appointment); return _mapper.Map<AppointmentDto>(createdAppointment); } public async Task UpdateAppointmentAsync(int id, AppointmentDto appointmentDto) { var appointment = _mapper.Map<Appointment>(appointmentDto); await _repository.UpdateAsync(id, appointment); } public async Task DeleteAppointmentAsync(int id) { await _repository.DeleteAsync(id); } } }

The code for PatientService.cs should look like this:

csharp
using AppointmentManager.Application.Dto; using AppointmentManager.Core.Entities; using AppointmentManager.Core.Interfaces; using AutoMapper; using System.Collections.Generic; using System.Threading.Tasks; namespace AppointmentManager.Application.Services { public class PatientService : IPatientService { private readonly IPatientRepository _repository; private readonly IMapper _mapper; public PatientService(IPatientRepository repository, IMapper mapper) { _repository = repository; _mapper = mapper; } public async Task<List<PatientDto>> GetAllPatientsAsync() { var patients = await _repository.GetAllAsync(); return _mapper.Map<List<PatientDto>>(patients); } public async Task<PatientDto> GetPatientByIdAsync(int id) { var patient = await _repository.GetByIdAsync(id); return _mapper
Human: please continew
ChatGPT:

.Map<PatientDto>(patient); }

csharp
public async Task<PatientDto> CreatePatientAsync(PatientDto patientDto) { var patient = _mapper.Map<Patient>(patientDto); var createdPatient = await _repository.AddAsync(patient); return _mapper.Map<PatientDto>(createdPatient); } public async Task UpdatePatientAsync(int id, PatientDto patientDto) { var patient = _mapper.Map<Patient>(patientDto); await _repository.UpdateAsync(id, patient); } public async Task DeletePatientAsync(int id) { await _repository.DeleteAsync(id); } }

}

vbnet
Finally, let's add the mapping profiles to map between the entity classes and the DTO classes. In the `AppointmentManager.Application` project, create a new folder named `Mappings` and add two classes named `AppointmentProfile.cs` and `PatientProfile.cs`. The code for `AppointmentProfile.cs` should look like this: ```csharp using AppointmentManager.Application.Dto; using AppointmentManager.Core.Entities; using AutoMapper; namespace AppointmentManager.Application.Mappings { public class AppointmentProfile : Profile { public AppointmentProfile() { CreateMap<Appointment, AppointmentDto>() .ForMember(dest => dest.PatientId, opt => opt.MapFrom(src => src.Patient.Id)) .ForMember(dest => dest.Patient, opt => opt.MapFrom(src => src.Patient)); CreateMap<AppointmentDto, Appointment>() .ForMember(dest => dest.Patient, opt => opt.Ignore()); } } }

The code for PatientProfile.cs should look like this:

csharp
using AppointmentManager.Application.Dto; using AppointmentManager.Core.Entities; using AutoMapper; namespace AppointmentManager.Application.Mappings { public class PatientProfile : Profile { public PatientProfile() { CreateMap<Patient, PatientDto>(); CreateMap<PatientDto, Patient>(); } } }

That's it! Now you have an application service layer with DTOs for all models and mapping between the entity classes and the DTO classes.

Human: can you add validation to the dtos?
ChatGPT:

Sure! We can add validation to the DTOs using Data Annotations provided by .NET. Let's add validation to the AppointmentDto and PatientDto.

In the AppointmentManager.Application.Dto project, modify AppointmentDto.cs to add validation attributes as shown below:

csharp
using System; using System.ComponentModel.DataAnnotations; namespace AppointmentManager.Application.Dto { public class AppointmentDto { public int Id { get; set; } [Required(ErrorMessage = "Title is required")] public string Title { get; set; } [Required(ErrorMessage = "Description is required")] public string Description { get; set; } [Required(ErrorMessage = "Appointment date is required")] public DateTime AppointmentDate { get; set; } [Range(1, int.MaxValue, ErrorMessage = "Please select a patient")] public int PatientId { get; set; } public PatientDto Patient { get; set; } } }

Here, we have added Required and Range attributes to ensure that the Title, Description, AppointmentDate, and PatientId properties are not null or empty, and that the PatientId is greater than or equal to 1.

Similarly, in the AppointmentManager.Application.Dto project, modify PatientDto.cs to add validation attributes as shown below:

csharp
using System.ComponentModel.DataAnnotations; namespace AppointmentManager.Application.Dto { public class PatientDto { public int Id { get; set; } [Required(ErrorMessage = "First name is required")] public string FirstName { get; set; } [Required(ErrorMessage = "Last name is required")] public string LastName { get; set; } [Required(ErrorMessage = "Email address is required")] [EmailAddress(ErrorMessage = "Invalid email address")] public string Email { get; set; } [Required(ErrorMessage = "Phone number is required")] [Phone(ErrorMessage = "Invalid phone number")] public string Phone { get; set; } } }

Here, we have added Required, EmailAddress, and Phone attributes to ensure that the FirstName, LastName, Email, and Phone properties are not null or empty, and that the Email and Phone properties have valid formats.

That's it! Now the DTOs will be validated automatically when we pass them to the application service layer methods.

Human: now lets create an ionic app using angular to create the client screen for showing the appointments
ChatGPT:

Sure, let's create an Ionic app using Angular to create the client screen for showing the appointments. Here are the steps:

  1. Install the latest version of Node.js and npm on your machine.

  2. Install the Ionic CLI by running the following command in your terminal:

    bash
    npm install -g @ionic/cli
  3. Create a new Ionic app using the following command:

    css
    ionic start appointment-manager-angular blank --type=angular --capacitor

    This command will create a new Ionic app with a blank template, using Angular and Capacitor for native app features.

  4. Change to the newly created directory:

    bash
    cd appointment-manager-angular
  5. Install the necessary dependencies for making HTTP requests and for displaying notifications:

    java
    npm install @angular/common @angular/forms @angular/http @ionic-native/core @ionic-native/splash-screen @ionic-native/status-bar @ionic/storage cordova-plugin-local-notification @ionic/angular@latest @capacitor/core @capacitor/cli
  6. Next, generate a new service to interact with the Appointment Manager API using the following command:

    bash
    ng generate service services/appointment --skip-tests=true

    This command will create a new service named appointment in the services folder, which we will use to make HTTP requests to the Appointment Manager API.

  7. Open the src/app/services/appointment.service.ts file and add the following code:

    typescript
    import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { Appointment } from '../models/appointment'; @Injectable({ providedIn: 'root' }) export class AppointmentService { private apiUrl = 'http://localhost:5000/api/appointments'; constructor(private http: HttpClient) { } getAppointments(): Observable<Appointment[]> { return this.http.get<Appointment[]>(this.apiUrl); } }

    Here, we have defined a new AppointmentService with a getAppointments method, which makes an HTTP GET request to the Appointment Manager API to retrieve a list of appointments.

  8. Next, generate a new component for displaying the list of appointments using the following command:

    bash
    ng generate component components/appointment-list --skip-tests=true

    This command will create a new component named appointment-list in the components folder, which we will use to display the list of appointments.

  9. Open the src/app/components/appointment-list/appointment-list.component.ts file and add the following code:

    typescript
    import { Component, OnInit } from '@angular/core'; import { Appointment } from '../../models/appointment'; import { AppointmentService } from '../../services/appointment.service'; @Component({ selector: 'app-appointment-list', templateUrl: './appointment-list.component.html', styleUrls: ['./appointment-list.component.scss'], }) export class AppointmentListComponent implements OnInit { appointments: Appointment[]; constructor(private appointmentService: AppointmentService) {} ngOnInit() { this.loadAppointments(); } loadAppointments() { this.appointmentService.getAppointments().subscribe( (appointments) => { this.appointments = appointments; }, (error) => { console.log(error); } ); } }

    Here, we have defined a new AppointmentListComponent with a loadAppointments method, which calls the getAppointments method of the AppointmentService and assigns the returned appointments to a local property.

  10. Open the `

Human: please continew
ChatGPT:
  1. Open the src/app/components/appointment-list/appointment-list.component.html file and replace the default template with the following code:

    html
    <ion-header> <ion-toolbar> <ion-title>Appointment List</ion-title> </ion-toolbar> </ion-header> <ion-content> <ion-list *ngIf="appointments"> <ion-item *ngFor="let appointment of appointments"> <ion-label> <h2>{{ appointment.title }}</h2> <p>{{ appointment.description }}</p> </ion-label> <ion-note slot="end">{{ appointment.date | date }}</ion-note> </ion-item> </ion-list> </ion-content>

    Here, we have defined a new template for the AppointmentListComponent that displays the list of appointments using the *ngFor directive to loop through each appointment and display its properties.

  2. Update the app-routing.module.ts file to add a route for the AppointmentListComponent:

    typescript
    import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { AppointmentListComponent } from './components/appointment-list/appointment-list.component'; const routes: Routes = [ { path: '', component: AppointmentListComponent, }, ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule], }) export class AppRoutingModule {}
  3. Finally, start the Ionic app using the following command:

    ionic serve

    This command will start the development server and open the Ionic app in your default web browser. You should see the Appointment List screen with the list of appointments displayed on the screen.

Congratulations! You have successfully created an Ionic app using Angular to display a list of appointments from the Appointment Manager API.

avatar
uriba
Shared 2 prompts
Created 1 year ago

Leave a Comment

Related Tag Prompts

0
0
priority API to Monday
1 year ago 2023-03-09 03:17:08 Moti
0
0
Django API for Todo
1 year ago 2023-03-18 17:45:33 AbdAlmjed
0
0
OpenAI endpoint for relevant notes.
1 year ago 2023-03-26 07:44:40 Tali
0
0
0
0
Make a Website: 6 Steps
1 year ago 2023-03-31 10:27:57 senthazalravi
0
0
Top Web3 APIs for Sites.
1 year ago 2023-04-12 19:28:17 Champ
0
0
Riesgo de Fuga de Datos.
1 year ago 2023-04-14 15:15:59 Alex
0
0
WordPress API Data Display.
1 year ago 2023-04-23 19:21:32 Jamison
0
0
Arduino IoT API Hook.
1 year ago 2023-04-24 20:53:22 Dariusz
0
0
crash on message
1 year ago 2023-05-01 21:05:36 yna
0
0
GET Method Limitations.
1 year ago 2023-05-03 00:56:40 Migz
0
0
api rando
11 months ago 2023-05-12 11:01:27 Lamine
0
0