ВСЕ магазины используют API, даже к бабке не ходи.
У крупных доставщиков API примитивнейшее, для специалиста на 3 часа работы (как любят говорить перекупы на биржах))) Т.е. твой клиент выбрал город доставки, до двери - до склада, на доставщика ушел запрос с параметрами - город отправки, город доставки, вес, размеры, тип доставки, прочая... В ответ приходит массив, его парсишь и показываешь клиенту. Я ж говорю, спец на 3 часа работы)))
Дьявол тут в деталях, например, Почта России и СДЕК используют разные идентификаторы городов, т.е. отправлять на каждого отдельный запрос. Или использовать аггрегаторов.
Никакая БД тут не нужна, так как тарифы у доставщиков меняются по сути каждый день, хотя как вариант можно и в БД забить, если нужна примерная стоимость. С другой стороны, несколько тысяч городов наложить на все варианты веса, все варианты габаритов, все варианты типов доставки - думаю понадобится еще одна БД только для тарифов)))
Забей и купи готовый плагин, они есть почти для любой адекватной CMS.