Skip to content

Commit aa8a463

Browse files
bradfriedmandpebot
authored andcommitted
Flesh out Endpoints quickstart into a tutorial app (#651)
1 parent ecd5f1f commit aa8a463

File tree

2 files changed

+44
-7
lines changed

2 files changed

+44
-7
lines changed

appengine/standard/endpoints-frameworks-v2/echo/app.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
runtime: python27
22
threadsafe: true
33
api_version: 1
4+
basic_scaling:
5+
max_instances: 2
46

57
#[START_EXCLUDE]
68
skip_files:

appengine/standard/endpoints-frameworks-v2/echo/main.py

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,67 @@
2424

2525

2626
# [START messages]
27-
class Echo(messages.Message):
27+
class EchoRequest(messages.Message):
28+
content = messages.StringField(1)
29+
30+
31+
class EchoResponse(messages.Message):
2832
"""A proto Message that contains a simple string field."""
2933
content = messages.StringField(1)
3034
# [END messages]
3135

3236

37+
ECHO_RESOURCE = endpoints.ResourceContainer(
38+
EchoRequest,
39+
n=messages.IntegerField(2, default=1))
40+
41+
3342
# [START echo_api]
3443
@endpoints.api(name='echo', version='v1')
3544
class EchoApi(remote.Service):
3645

3746
@endpoints.method(
38-
# This method takes an Echo message.
39-
Echo,
47+
# This method takes a ResourceContainer defined above.
48+
ECHO_RESOURCE,
4049
# This method returns an Echo message.
41-
Echo,
50+
EchoResponse,
4251
path='echo',
4352
http_method='POST',
4453
name='echo')
4554
def echo(self, request):
46-
return Echo(content=request.content)
55+
output_content = ' '.join([request.content] * request.n)
56+
return EchoResponse(content=output_content)
57+
58+
@endpoints.method(
59+
# This method takes a ResourceContainer defined above.
60+
ECHO_RESOURCE,
61+
# This method returns an Echo message.
62+
EchoResponse,
63+
path='echo/{n}',
64+
http_method='POST',
65+
name='echo_path_parameter')
66+
def echo_path_parameter(self, request):
67+
output_content = ' '.join([request.content] * request.n)
68+
return EchoResponse(content=output_content)
69+
70+
@endpoints.method(
71+
# This method takes a ResourceContainer defined above.
72+
ECHO_RESOURCE,
73+
# This method returns an Echo message.
74+
EchoResponse,
75+
path='echo',
76+
http_method='POST',
77+
name='echo_api_key',
78+
api_key_required=True)
79+
def echo_api_key(self, request):
80+
output_content = ' '.join([request.content] * request.n)
81+
return EchoResponse(content=output_content)
4782

4883
@endpoints.method(
4984
# This method takes an empty request body.
5085
message_types.VoidMessage,
5186
# This method returns an Echo message.
52-
Echo,
87+
EchoResponse,
5388
path='echo/getUserEmail',
5489
http_method='GET',
5590
# Require auth tokens to have the following scopes to access this API.
@@ -62,7 +97,7 @@ def get_user_email(self, request):
6297
# raise 401 Unauthorized.
6398
if not user:
6499
raise endpoints.UnauthorizedException
65-
return Echo(content=user.email())
100+
return EchoResponse(content=user.email())
66101
# [END echo_api]
67102

68103

0 commit comments

Comments
 (0)