| # Build API Endpoint Tutorial Part 2 | 
 |  | 
 | This README is a continuation of | 
 | [Hello World Tutorial Part 1](1_hello_world.md), | 
 | creating a "Hello world!" endpoint from scratch. | 
 | This tutorial assumes you have already executed all the steps in Part 1, and | 
 | have all its code in place. | 
 |  | 
 | ## Hello World Part 2: "Hello {argument}!" | 
 |  | 
 | "World" is great and all, but it'd be nice to be able to say hello to other | 
 | things. | 
 | This continuation will walk through adding fields to requests, using them in | 
 | the endpoints, and manually executing parameterized endpoints. | 
 |  | 
 | ### Step 1: Parameterizing the library. | 
 |  | 
 | First, let's upgrade our lib. | 
 |  | 
 | `chromite/lib/hello_lib.py`: | 
 | ````python | 
 | def hello(target): | 
 |     print(f'Hello, {target}!') | 
 | ```` | 
 |  | 
 | Now we can say hello to whatever we want! | 
 |  | 
 | ### Step 2: Parameterizing the proto. | 
 |  | 
 | Next, we need to add a field to our proto, so we can pass it in through the API. | 
 | This time we'll just look at the HelloRequest message, as it's the only | 
 | part that needs changes. | 
 | We'll add a new string field to pass our target. | 
 |  | 
 | `chromite/infra/proto/src/chromite/api/hello.proto`: | 
 | ```protobuf | 
 | // HelloService/Hello request and response messages. | 
 | message HelloRequest { | 
 |   string target = 1; | 
 | } | 
 | ``` | 
 |  | 
 | Since we've updated the proto, we'll need to regenerate the protobuf bindings | 
 | again. | 
 |  | 
 | ```shell script | 
 | $> cd ~/chromiumos/chromite/infra/proto | 
 | $> ./generate.sh | 
 | $> cd ~/chromiumos/chromite/api | 
 | $> ./compile_build_api_proto | 
 | ``` | 
 |  | 
 | ### Step 3: Passing arguments. | 
 |  | 
 | Finally, we update our controller. | 
 | We just need to pull the field out of the proto and pass it through to our | 
 | hello_lib.hello call. | 
 | The input proto is the instance of the HelloRequest we provide, so we just need | 
 | to grab the field from the message. | 
 |  | 
 | `chromite/api/controller/hello.py`: | 
 | ```python | 
 | from chromite.lib import hello_lib | 
 |  | 
 | def Hello(input_proto, output_proto, config_proto): | 
 |     hello_lib.hello(target=input_proto.target) | 
 | ``` | 
 |  | 
 | ### Step 4: Calling the parameterized endpoint. | 
 |  | 
 | We can still use the `gen_call_scripts` workflow we used in Step 6, we just | 
 | need to add the values to our request. | 
 | As noted earlier, the `gen_call_scripts` workflow generates an input for each | 
 | endpoint automatically. | 
 | By default, it'll generate an empty input file, so we just need to add to the | 
 | file we already have. | 
 |  | 
 | ```shell script | 
 | $> cat chromite/api/contrib/call_scripts/hello__hello_input.json | 
 | {} | 
 | ``` | 
 |  | 
 | Let's say hello to the moon, instead. | 
 |  | 
 | `chromite/api/contrib/call_scripts/hello__hello_input.json` | 
 | ```json | 
 | {"target": "moon"} | 
 | ``` | 
 |  | 
 | And that's it! | 
 | Now if we run the endpoint, we should see our updated greeting. | 
 |  | 
 | ```shell script | 
 | $> cd ~/chromiumos/chromite/api/contrib/call_scripts/ | 
 | $> ./hello__hello | 
 | Running chromite.api.HelloService/Hello | 
 | 14:39:27: DEBUG: Services registered successfully. | 
 | Hello, moon! | 
 | Completed chromite.api.HelloService/Hello | 
 | Success! | 
 | Return Code: 0 | 
 | Result: | 
 | {} | 
 | ``` | 
 |  | 
 | Success! | 
 |  | 
 | ## Up Next | 
 |  | 
 | Continue to [Part 3](3_hello_validation.md), where we'll look at validating the | 
 | input. |