top of page

Domain Registration

Software Architect and .NET Developer

Overview

Automatically register a domain on DNSimple for the client, register a profile in Office365, add A records and MX records, and add the user to the Office365 subscription.

Domain Registration Workflow.jpg

Goals

Goal: Implement it as a workflow to address potential issues with unexpected or no responses from external resources and retry if necessary. Generally, implement a principle akin to ACID for databases: Atomicity, Consistency, Isolation, Durability

Goal-Setting.jpg

Tasks that I, as a developer and project architect, have faced:

Consistency. All steps follow a specific order, one after another; none of the steps can be completed without successfully completing the previous one. Considering that external services (DNSimple and Office365) may be temporarily unavailable, an efficient waiting mechanism is necessary. Additionally, handling cases where an external service cannot process a specific request for some reason, with possible rollback to a certain phase and notification of responsible personnel, is essential.

Variety of actions. In addition to "standard" API calls to external resources, it is also necessary to work with specific methods (for example, finding a way to add a TXT record to a domain registrar if there is no corresponding API available, and even using an emulator to simulate the use of a graphical web interface in a Virtual Machine).

The complexity of debugging and writing integration tests

Implementation

Technologies:

  •  .NET Core

  •  Azure SQL

  •  Azure Functions

  •  Azure Storage Queue

  •  Entity Framework Core

  •  ASP.NET Core

Since the workflow consists of several dozen steps (with branching possibilities in some cases) that are isolated from each other, the system is built using Queues. Queues guarantee the atomicity of actions, allowing one module to interact with another (or others) using the corresponding Queue. After successfully completing its task, a module reliably retrieves a message from its incoming queue and adds it to the outgoing queue (or queues), which is then listened to by the next module.

The implementation consists of a foundational abstract base class at the top level, providing basic functionality required by all modules (Azure Functions), and several child abstract classes based on the type of request. Concrete classes inherit from these child abstract classes.

Responsibilities

Design Project Architecture: Develop a robust architecture for automating domain registration on DNSimple and user profile management in Office365, ensuring the workflow adheres to principles akin to ACID (Atomicity, Consistency, Isolation, Durability).

Code Development: Produce clean, efficient, and maintainable code that adheres to project specifications, focusing on integration with external services and implementing necessary fallback mechanisms

Workflow Implementation: Implement the automated workflow for domain registration and Office365 profile management, including retry mechanisms and handling potential issues with unexpected or no responses from external resources.

Testing and Debugging: Conduct thorough testing, debugging, and troubleshooting of the code and integration points to ensure reliable functionality and address issues related to external services and system integration.

Integration and Automation: Utilize Azure Functions and Queues to automate the workflow, including adding A records, MX records, and managing Office365 subscriptions. Ensure proper handling of service unavailability and request processing failures.

Handling External Service Variability: Address the variety of actions required, including working with APIs and emulators for graphical interfaces methods (Selenium) to manage domain records and Office365 profiles effectively

bottom of page