VII. Привʼязка портів
Експортуйте сервіси за допомогою привʼязки портів (port binding)
Вебзастосунки іноді запускаються всередині контейнера вебсервера. Наприклад, PHP-застосунок може бути запущений як модуль всередині Apache HTTPD або Java-застосунок може бути запущений всередині Tomcat.
12-факторний застосунок є повністю самодостатнім і в процесі виконання, щоб створити вебсервіс, доступний через web, не покладається на вживлення вебсервера в середовище виконання. Вебзастосунок експортує HTTP-сервіс шляхом привʼязки до порту та прослуховує запити, що надходять на цей порт.
У локальному development середовищі розробник використовує URL-адресу вигляду http://localhost:5000/
для доступу до сервісу, що експортується застосунком. При розгортанні рівень маршрутизації обробляє запити до загальнодоступного хосту і перенаправляє їх до порту, до якого привʼязано вебпроцес.
Як правило, це реалізується за допомогою оголошення залежностей через додавання бібліотеки вебсервера до застосунку, наприклад, Tornado для Python, Thin для Ruby або Jetty для Java та інших мов на основі JVM. Це відбувається повністю в просторі користувача, тобто в коді застосунку. Привʼязка до порту для обробки запитів є "угодою" із середовищем виконання.
HTTP — не єдиний сервіс, який може бути експортований шляхом привʼязки портів. Майже будь-яке серверне програмне забезпечення може бути запущено за допомогою процесу привʼязки до порту та очікування вхідних запитів. Прикладами є ejabberd (використовує XMPP) і Redis (використовує протокол Redis).
Також зверніть увагу, що підхід привʼязки до портів означає, що застосунок може виступати як стороння служба для іншого застосунку, надаючи свою URL-адресу як ресурс в конфігурації застосунку-споживачу.