DEV Community

Cover image for Before REST APIs Existed: How Did Software Even Talk to Each Other?
Shubhajit Paul
Shubhajit Paul

Posted on

Before REST APIs Existed: How Did Software Even Talk to Each Other?

Before REST APIs Existed: How Did Software Even Talk to Each Other?

Let’s rewind.

Today, if one app wants data from another, we barely think about it.
We make an HTTP request.
We get JSON back.
Life is good.

But here’s the uncomfortable question most beginners never ask:

How did software communicate before REST APIs existed?
Did engineers just… email files to each other? 😄

Surprisingly, that’s not far from the truth.

Let’s build this story from the ground up.


The original problem (before APIs were even a thing)

Imagine it’s the 1970s–1980s.

You have:

  • One program that stores data (say, payroll)
  • Another program that needs that data (say, accounting)

They don’t live on the same machine.
They might not even be written in the same language.
There’s no internet as we know it.

The real problem:

“How can one piece of software get information from another without a human in the middle?”

That single question drove everything that came next.


Phase 1: Humans were the API

Before machines talked directly, people moved data.

How it worked

  1. Program A writes data to a file
  2. A human copies that file (floppy disk, tape, later FTP)
  3. Program B reads the file

Why this existed

  • Computers were isolated
  • Networks were rare and slow
  • Simplicity mattered more than speed

Why it sucked

  • Slow (hours or days)
  • Error-prone
  • Not real-time
  • One tiny format change could break everything

This wasn’t software communication.
It was data transportation with humans as couriers.


Phase 2: Direct database access (a terrible but tempting idea)

As networks improved, developers had a new thought:

“Why not just let Program B connect directly to Program A’s database?”

Why people loved this

  • Fast
  • No middle layer
  • Felt powerful

Why it was a disaster

  • Tight coupling (change one table, everything breaks)
  • Massive security risks
  • Zero boundaries
  • No control over how data was used

This was like giving strangers the keys to your house instead of answering the door.

It worked… until it didn’t.


Phase 3: Remote Procedure Calls (RPC) — “Just call my function”

Now engineers tried to think like programmers again.

“What if I could call a function on another machine like it’s local?”

That idea gave birth to RPC systems.

How it worked (conceptually)

getUserById(42)
Enter fullscreen mode Exit fullscreen mode

…runs on another server, returns the result.

Why it felt amazing

  • Familiar (function calls!)
  • No file copying
  • Faster than human-based workflows

The hidden problems

  • Extremely fragile
  • Strong dependency on language and platform
  • Versioning nightmares
  • Network failures looked like “random bugs”

You couldn’t see the boundary anymore — and that was dangerous.


Phase 4: Enterprise monsters (CORBA, DCOM, SOAP)

As companies grew, so did ambition.

“We need a standard, enterprise-grade way for systems to talk.”

The result was heavyweight frameworks that promised:

  • Cross-language support
  • Strong typing
  • Security
  • Reliability

And they delivered… at a cost.

What went wrong

  • Massive complexity
  • XML everywhere (painful, verbose, slow)
  • Required specialists just to understand errors
  • Simple tasks needed huge setup

These systems didn’t fail technically.
They failed humanly.

Developers dreaded touching them.


Phase 5: Messaging systems (asynchronous thinking)

Some engineers stepped back and asked a better question:

“Do systems really need to talk directly?”

Enter message queues.

How this changed thinking

  • Program A sends a message
  • Program B reads it when ready
  • No waiting
  • No direct dependency

This solved:

  • Reliability
  • Scalability
  • Spikes in traffic

But it introduced:

  • Eventual consistency
  • Harder debugging
  • Mental overhead

Still, it was a huge leap forward.


So why REST felt revolutionary

REST didn’t invent communication.
It simplified expectations.

REST said:

  • Use the web (HTTP)
  • Use simple verbs (GET, POST, PUT, DELETE)
  • Treat data as resources, not functions
  • Embrace statelessness
  • Accept that networks are unreliable

Most importantly, REST respected boundaries.

It made the cost of crossing a boundary obvious.

That was the real breakthrough.

The big lesson (this matters more than REST)

If you remember only one thing, remember this:

APIs exist because software boundaries are real and painful.

Every “old” solution failed for the same reason:

  • Too much coupling
  • Too much magic
  • Not enough respect for failure

REST wasn’t perfect.
It was honest.

And that honesty made it boring, predictable, and wildly successful.


Final thought (from someone who’s been burned)

Modern developers often complain about REST:

  • “Too slow”
  • “Too verbose”
  • “Not flexible enough”

That’s fair.

But those complaints come from people who’ve never lived without it.

Before REST, software didn’t talk.
It argued, broke, and blamed humans.

REST didn’t make systems smart.
It made them civilized.

And that’s why it still matters.

Top comments (0)