Let's go ahead and create a miniature, yet full-blown Magento module Magelicious_Boxy that demonstrates the entire flow of creating a custom web API.
We start off by defining a module <MAGELICIOUS_DIR>/Boxy/registration.php as follows:
\Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Magelicious_Boxy', __DIR__);
We then define the <MAGELICIOUS_DIR>/Boxy/etc/module.xml as follows:
<config> <module name="Magelicious_Boxy" setup_version="2.0.2"/></config>
We then define the <MAGELICIOUS_DIR>/Boxy/Setup/InstallSchema.php that adds the following table:
$table = $setup->getConnection() ->newTable($setup->getTable('magelicious_boxy_box')) ->addColumn( 'entity_id', ...