Enabling users to add new field to a collection type by API

That branches into two questions to me now.

  1. Should the logic behind the custom endpoint I will be implementing make changes to the database directly?

  2. What I do is in fact already can been done by content manager, and I understand that content manager is considered as a default plugin that comes with Strapi. Should I extend the plugin or can I make use of the existing functions (or even endpoints) of the content manager instead of coding that from scratch?