Add missing content for backend roadmap

pull/3737/head
Kamran Ahmed 2 years ago
parent 7434ff71eb
commit 133642e05f
  1. 6
      bin/roadmap-content.cjs
  2. 34
      src/data/roadmaps/backend/content/109-apis/106-authentication/105-saml.md
  3. 38
      src/data/roadmaps/backend/content/114-design-and-development-principles/index.md
  4. 30
      src/data/roadmaps/backend/content/116-search-engines/index.md

@ -111,7 +111,11 @@ async function run() {
const topicTitle = group?.children?.controls?.control?.find(
(control) => control?.typeID === 'Label'
)?.properties?.text;
const currTopicUrl = topicId.replace(/^\d+-/g, '/').replace(/:/g, '/');
const currTopicUrl = topicId?.replace(/^\d+-/g, '/')?.replace(/:/g, '/');
if (!currTopicUrl) {
continue;
}
const contentFilePath = topicUrlToPathMapping[currTopicUrl];
if (!contentFilePath) {

@ -1 +1,33 @@
# Saml
## Security Assertion Markup Language (SAML)
**SAML** stands for Security Assertion Markup Language. It is an XML-based standard for exchanging authentication and authorization data between parties, particularly between an identity provider (IdP) and a service provider (SP). In a SAML-based system, a user requests access to a protected resource. The service provider asks the identity provider to authenticate the user and assert whether they are granted access to the resource.
### Benefits of SAML
Some advantages of using SAML include:
- Single Sign-On (SSO): Users can log in once at the IdP and access multiple service providers without needing to authenticate again.
- Improved security: Passwords and user credentials are not required to be stored and managed by the service provider, reducing the potential vectors for attack.
- Increased efficiency: As users no longer need to maintain multiple sets of credentials, managing access becomes easier for both the user and the system administrators.
- Interoperability: SAML enables a wide range of applications to work together, regardless of the underlying technology or platform.
### SAML Components
Three main components are involved in the SAML architecture:
1. **Identity Provider (IdP)**: The entity that manages users' identities and authenticates them by providing security tokens, also called assertions.
2. **Service Provider (SP)**: The entity that provides a service (such as a web application or API) and relies on the identity provider to authenticate users and grant/deny access to the resources.
3. **User/Principal**: The end user seeking access to the service provided by the service provider.
### SAML Workflow
The SAML authentication process consists of the following steps:
1. The user requests access to a protected resource from the service provider.
2. If the user is not already authenticated, the service provider generates and sends a SAML authentication request to the identity provider.
3. The identity provider authenticates the user (using, e.g., a username and password, multi-factor authentication, or another method).
4. The identity provider constructs a SAML response, which includes details about the user and asserts whether the user is authorized to access the requested resource.
5. The SAML response is sent back to the service provider, typically via the user's web browser or API client.
6. The service provider processes the SAML response, extracts the necessary information, and grants or denies access to the user based on the identity provider's assertion.
With SAML, you can streamline user authentication and authorization across various applications and systems, providing a better user experience and improving your overall backend security.

@ -1 +1,37 @@
# Design and development principles
# Design and Development Principles
In this section, we'll discuss some essential design and development principles to follow while building the backend of any application. These principles will ensure that the backend is efficient, scalable, and maintainable.
## 1. Separation of Concerns (SoC)
Separation of Concerns is a fundamental principle that states that different functionalities of a system should be as independent as possible. This approach improves maintainability and scalability by allowing developers to work on separate components without affecting each other. Divide your backend into clear modules and layers, such as data storage, business logic, and network communication.
## 2. Reusability
Reusability is the ability to use components, functions, or modules in multiple places without duplicating code. While designing the backend, look for opportunities where you can reuse existing code. Use techniques like creating utility functions, abstract classes, and interfaces to promote reusability and reduce redundancy.
## 3. Keep It Simple and Stupid (KISS)
KISS principle states that the simpler the system, the easier it is to understand, maintain, and extend. When designing the backend, try to keep the architecture and code as simple as possible. Use clear naming conventions and modular structures, and avoid over-engineering and unnecessary complexity.
## 4. Don't Repeat Yourself (DRY)
Do not duplicate code or functionality across your backend. Duplication can lead to inconsistency and maintainability issues. Instead, focus on creating reusable components, functions or modules, which can be shared across different parts of the backend.
## 5. Scalability
A scalable system is one that can efficiently handle an increasing number of users, requests, or data. Design the backend with scalability in mind, considering factors such as data storage, caching, load balancing, and horizontal scaling (adding more instances of the backend server).
## 6. Security
Security is a major concern when developing any application. Always follow best practices to prevent security flaws, such as protecting sensitive data, using secure communication protocols (e.g., HTTPS), implementing authentication and authorization mechanisms, and sanitizing user inputs.
## 7. Testing
Testing is crucial for ensuring the reliability and stability of the backend. Implement a comprehensive testing strategy, including unit, integration, and performance tests. Use automated testing tools and set up continuous integration (CI) and continuous deployment (CD) pipelines to streamline the testing and deployment process.
## 8. Documentation
Proper documentation helps developers understand and maintain the backend codebase. Write clear and concise documentation for your code, explaining the purpose, functionality, and how to use it. Additionally, use comments and appropriate naming conventions to make the code itself more readable and self-explanatory.
By following these design and development principles, you'll be well on your way to creating an efficient, secure, and maintainable backend for your applications.

@ -1 +1,29 @@
# Search engines
# Search Engines
Search engines are an essential part of any web application, responsible for providing efficient and relevant search results for users. They store and retrieve data based on unique indexes, which allow for fast and accurate searches. As a backend developer, understanding search engines functionalities, and how to integrate them into your web application, is crucial.
## Types of Search Engines
There are two primary types of search engines:
1. **Full-text search engines**: These are specifically designed for searching and analyzing text documents. They can efficiently index large volumes of text and provide relevant results based on keywords or phrases. Popular full-text search engines examples include **Elasticsearch**, **Solr**, and **Amazon CloudSearch**.
2. **Database search engines**: Database engines are built-in features of most databases. They provide search capabilities within the data stored in the database. Examples include **MySQL FULLTEXT search** and **PostgreSQL Full-Text Search**.
## Key Concepts
When dealing with search engines, it's important to understand these key concepts:
- **Indexing**: The process of analyzing and storing data in an optimized format for fast search and retrieval.
- **Tokenization**: Breaking text into individual words or terms (also known as tokens), for efficient indexing and searching.
- **Querying**: The act of searching the indexed data by asking a specific question or requesting information based on keywords or phrases.
- **Relevance scoring**: A score assigned to each search result that indicates how closely it matches the query, based on algorithms and relevance models.
## Integration
To integrate a search engine into your web application, you would typically follow these steps:
1. **Choose the search engine**: Identify the search engine that best suits your application's needs, considering factors such as scalability, performance, and ease of integration.
2. **Index your data**: Analyze and store your data using the chosen search engine. This process may involve creating an index, specifying fields, and defining how the data should be tokenized and analyzed.
3. **Implement search functionality**: Develop the backend code for handling search requests, such as sending queries to the search engine and parsing the responses. Additionally, make sure to handle user inputs, like keywords, phrases, and filters.
4. **Display search results**: Design the frontend of your application to show search results in a user-friendly manner, including pagination, sorting, and filters.

Loading…
Cancel
Save