Can I map a hostname *and* a port with /etc/hosts?
No, that's not possible. The port is not part of the hostname, so it has no meaning in the hosts
-file.
If you really need to do this, use a reverse proxy. For example, with Nginx:
server {
listen api.mydomain.com:80;
server_name api.mydomain.com;
location / {
proxy_pass http://127.0.0.1:8000;
}
}