Skip to content

Commit

Permalink
Firebase for Serverless Backends and Cloud Functions (#189)
Browse files Browse the repository at this point in the history
  • Loading branch information
whyismynamerudy authored Nov 28, 2023
2 parents 837b048 + 09adef7 commit 53bcdf9
Show file tree
Hide file tree
Showing 2 changed files with 109 additions and 0 deletions.
1 change: 1 addition & 0 deletions Topics/Tech_Stacks.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
### [Learning JavaScript](./Tech_Stacks/JavaScript.md)
### [Learning React Native](./Tech_Stacks/ReactNative.md)
### [Learning Nodemailer](./Tech_Stacks/Nodemailer.md)
### [Learning Firebase for Serverless Backends and Cloud Functions](./Tech_Stacks/FirebaseServerlessCloud.md)
### [React Components Guide](./Tech_Stacks/React_Components.md)
### [Flutter](./Tech_Stacks/Flutter.md)
### [Temporal For Workflow Orchestration](./Tech_Stacks/Temporal.md)
Expand Down
108 changes: 108 additions & 0 deletions Topics/Tech_Stacks/FirebaseServerlessCloud.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Firebase for Serverless Backends and Cloud Functions

## Serverless Backends

Serverless backends in Firebase encompass the entire infrastructure required to power an application, offering a range of services such as databases (Firestore, Realtime Database), authentication, hosting, and more. These backends abstract away server management, allowing developers to focus solely on writing code without worrying about underlying infrastructure concerns.

## Cloud Functions

Cloud Functions in Firebase are integral to implementing serverless backends within the Firebase ecosystem. They are small, event-driven functions that respond to various triggers like database events, HTTP requests, authentication events, and more. These functions execute specific tasks or logic in response to these events, providing a scalable and managed way to handle functionalities within the serverless architecture.

### Integration within Firebase

Firebase's Cloud Functions are a key component used to build serverless backends. While Cloud Functions handle specific tasks triggered by events, a complete serverless backend in Firebase involves utilizing these functions in conjunction with other Firebase services like Firestore, Realtime Database, Authentication, and Hosting. Together, these services enable developers to create a holistic, scalable, and fully managed backend infrastructure for their applications.

### Key Relationship

Cloud Functions can be seen as Firebase's implementation of serverless functions within the broader context of building serverless backends. They are instrumental in enabling developers to add custom logic, respond to events, and create specific functionalities without managing servers. However, they are just one piece of the larger puzzle that constitutes a serverless backend in Firebase.

In essence, Cloud Functions within Firebase serve as a crucial part of building serverless backends, working alongside other Firebase services to create scalable, event-driven, and fully managed backend infrastructures for modern applications.

### Sample Code

Here's an example of Firebase Cloud Functions using Python:

```python
# The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
from firebase_functions import firestore_fn, https_fn

# The Firebase Admin SDK to access Cloud Firestore.
from firebase_admin import initialize_app, firestore
import google.cloud.firestore

app = initialize_app()

@https_fn.on_request()
def addmessage(req: https_fn.Request) -> https_fn.Response:
"""Take the text parameter passed to this HTTP endpoint and insert it into
a new document in the messages collection."""
# Grab the text parameter.
original = req.args.get("text")
if original is None:
return https_fn.Response("No text parameter provided", status=400)

firestore_client: google.cloud.firestore.Client = firestore.client()

# Push the new message into Cloud Firestore using the Firebase Admin SDK.
_, doc_ref = firestore_client.collection("messages").add({"original": original})

# Send back a message that we've successfully written the message
return https_fn.Response(f"Message with ID {doc_ref.id} added.")

@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
"""Listens for new documents to be added to /messages. If the document has
an "original" field, creates an "uppercase" field containing the contents of
"original" in uppercase."""

# Get the value of "original" if it exists.
if event.data is None:
return
try:
original = event.data.get("original")
except KeyError:
# No "original" field, so do nothing.
return

# Set the "uppercase" field.
print(f"Uppercasing {event.params['pushId']}: {original}")
upper = original.upper()
event.data.reference.update({"uppercase": upper})
```

### Additional Resources

To deepen your understanding and explore further, here are some recommended resources:
- [Firebase Documentation](https://firebase.google.com/docs): Detailed guides and references on Firebase services and Cloud Functions.
- [Firebase YouTube Channel](https://www.youtube.com/user/Firebase): Video tutorials and demonstrations for implementing Firebase features.
- [Firebase GitHub Repository](https://github.com/firebase): Access Firebase code samples, SDKs, and community-contributed projects.

### Use Case: Implementing Custom Logic

Let's consider an example where custom logic is applied within a serverless backend using Firebase Cloud Functions:

Suppose you have a social media platform where users can post messages. You want to implement a feature that automatically categorizes these messages based on their content into different topics for easier organization and searchability.

Using Firebase Cloud Functions, you can create a function triggered by the creation of a new message in Firestore. This function can analyze the content of the message, determine its category (e.g., sports, technology, travel), and update the Firestore document with the identified category.

### Example: Categorizing Messages

```python
# Firebase Cloud Function to categorize messages based on content.
from firebase_functions import firestore_fn

@firestore_fn.on_document_created(document="messages/{pushId}")
def categorize_message(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
if event.data is None:
return

try:
message_text = event.data.get("text")
except KeyError:
return

# Perform content analysis to determine the category
category = analyze_content(message_text)

# Update the Firestore document with the identified category
event.data.reference.update({"category": category})

0 comments on commit 53bcdf9

Please sign in to comment.