API Fundamentals
Master GitHub's REST and GraphQL APIs with enterprise authentication
Authentication
# Personal Access Token
curl -H "Authorization: token YOUR_TOKEN" \
https://api.github.com/user
# GitHub App JWT
curl -H "Authorization: Bearer YOUR_JWT" \
https://api.github.com/app
Rate Limiting
# Check rate limit
curl -H "Authorization: token YOUR_TOKEN" \
https://api.github.com/rate_limit
# Response headers show limits
X-RateLimit-Remaining: 4999
X-RateLimit-Reset: 1625097600
GraphQL vs REST
# GraphQL - Single request
query {
repository(owner: "octocat", name: "Hello-World") {
issues(first: 10) {
edges { node { title, state } }
}
}
}
Repository Automation
Automate repository management, branch policies, and release processes
Automated Repository Manager
class RepositoryManager {
async createRepository(name, options = {}) {
const response = await fetch('https://api.github.com/user/repos', {
method: 'POST',
headers: {
'Authorization': `token ${this.token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
name,
private: options.private || false,
auto_init: true,
gitignore_template: options.gitignore || 'Node'
})
});
if (response.ok) {
const repo = await response.json();
await this.setupBranchProtection(repo.full_name);
return repo;
}
}
async setupBranchProtection(repoName) {
return fetch(`https://api.github.com/repos/${repoName}/branches/main/protection`, {
method: 'PUT',
headers: {
'Authorization': `token ${this.token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
required_status_checks: { strict: true, contexts: ['ci/tests'] },
enforce_admins: true,
required_pull_request_reviews: { required_approving_review_count: 2 }
})
});
}
}
Workflow Integration
Control GitHub Actions and CI/CD pipelines programmatically
Workflow Controller
class WorkflowManager {
async triggerWorkflow(owner, repo, workflowId, ref = 'main') {
return fetch(`https://api.github.com/repos/${owner}/${repo}/actions/workflows/${workflowId}/dispatches`, {
method: 'POST',
headers: {
'Authorization': `token ${this.token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ ref })
});
}
async getWorkflowRuns(owner, repo) {
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}/actions/runs`);
return response.json();
}
async downloadArtifact(owner, repo, artifactId) {
const response = await fetch(
`https://api.github.com/repos/${owner}/${repo}/actions/artifacts/${artifactId}/zip`,
{ headers: { 'Authorization': `token ${this.token}` } }
);
return response.blob();
}
}
Enterprise Integration
Build comprehensive enterprise automation with monitoring and alerts
Enterprise Integration Hub
JIRA Sync
// Auto-sync GitHub issues with JIRA
async syncWithJira(issue) {
const jiraIssue = {
fields: {
project: { key: 'PROJ' },
summary: issue.title,
description: issue.body,
issuetype: { name: 'Task' }
}
};
return fetch(`${this.jiraUrl}/rest/api/3/issue`, {
method: 'POST',
headers: {
'Authorization': `Basic ${this.jiraAuth}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(jiraIssue)
});
}
Slack Notifications
// Real-time Slack alerts
async notifySlack(event) {
const message = {
channel: '#dev-alerts',
text: `🚀 ${event.action}: ${event.repository.name}`,
attachments: [{
color: event.action === 'opened' ? 'good' : 'warning',
fields: [
{ title: 'Author', value: event.sender.login, short: true },
{ title: 'Repository', value: event.repository.full_name, short: true }
]
}]
};
return fetch(this.slackWebhook, {
method: 'POST',
body: JSON.stringify(message)
});
}
Monitoring Dashboard
// Real-time metrics collection
class GitHubMonitor {
async collectMetrics() {
const metrics = {
repositories: await this.getRepoCount(),
pullRequests: await this.getPRStats(),
deployments: await this.getDeploymentStatus(),
codeQuality: await this.getCodeQualityMetrics()
};
// Send to monitoring system
await this.sendToDatadog(metrics);
return metrics;
}
}
API Gateway
// Secure API gateway with rate limiting
app.use('/api/github', rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per windowMs
}));
app.use('/api/github', authenticateToken);
app.get('/api/github/repos', async (req, res) => {
const repos = await github.getRepos(req.user.id);
res.json(repos);
});
Mission Summary
Enterprise GitHub mastery achieved - Review your commander-level skills
API Master
REST & GraphQL expertise
Automation Expert
Repository & workflow automation
Integration Architect
Enterprise system connections
Security Commander
Production-ready solutions
Enterprise GitHub Commander
Completion Date:
Skills Mastered: GitHub API Architecture, Repository Automation, Workflow Engineering, Enterprise Integration
🚀 Mission Complete - What's Next?
You've mastered enterprise GitHub automation! Ready for Phase 6: DevOps & Cloud Integration?