> For the complete documentation index, see [llms.txt](https://arif-hanif.gitbook.io/slackclone/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://arif-hanif.gitbook.io/slackclone/server/untitled.md).

# Server Introduction

### Server Technologies <a href="#whatwillilearn" id="whatwillilearn"></a>

* [.NET Core 3](https://docs.microsoft.com/en-us/dotnet/core/) - General purpose cross platform development platform maintained by Microsoft
* [ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-3.0) - Framework for building modern, cloud-based, Internet-connected applications in .NET
* [HotChocolate](https://hotchocolate.io/) - Open Source GraphQL Implementation for .NET
* [MongoDB](https://www.mongodb.com/) - Open-source NoSQL Database
  * [MongoDB .NET Driver](https://mongodb.github.io/mongo-csharp-driver/) - MongoDB Provider for .NET
  * [Studio 3T](https://studio3t.com/) - GUI and IDE for MongoDb
* [PostgreSQL](https://www.postgresql.org/) - Open-source SQL Database
  * [Entity Framework Core](https://docs.microsoft.com/en-us/ef/core/) - Open Source .NET Object-Relational Mapper (ORM)
  * [pgAdmin](https://www.pgadmin.org/) - Open Source Admin interface for PostgreSQL
  * [Npgsql](http://www.npgsql.org/) - PostgreSQL Provider for .NET

### What to expect

The goal of this tutorial is to build an API for a simplified Slack clone. Here is a quick rundown of what to expect in this tutorial.

You’ll start by learning the basics of how a GraphQL server works, simply by defining a *GraphQL schema* for the server and writing corresponding *resolver functions*. In the beginning, these resolvers will only work with data that’s stored in-memory - so nothing will be persisted beyond the run-time of the server.

Because nobody wants a server that’s not able to store and persist data, you’re going to add a database layer to it.

Once you have the database connected, you are going to add more advanced features to the API.

You’ll start by implementing signup/login functionality that enables users to authenticate against the API. This will also allow you to check the permissions of your users for certain API operations.

The next part of the tutorial is about adding real-time functionality to your API using GraphQL subscriptions.

Lastly, you’ll allow the consumers of the API to constrain the list of items they retrieve from the API by adding filtering and pagination capabilities to it.
